Está en la página 1de 38

Planos de corte

Nilton A. Garcia

COMPUTACIN Hilares

GRFICA
Planos de corte Introduccin
Volumen de visualizacin
Cutting planes
Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

Lic. Nilton Alan Garca Hilares


Universidad Nacional Mayor de San Marcos
1.1
Planos de corte
Contenido
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Introduccin
Clipping planes Volumen de visualizacin

Planos de corte

Aplicacin Clipping planes

Aplicacin
Escena Escena

Planos de corte Planos de corte


Habilitar planos de corte
Habilitar planos de corte Inhabilitar planos de corte
Combinando planos de
Inhabilitar planos de corte corte

Combinando planos de corte Ejercicios


Escena I
Escena II
Escena III
Ejercicios
Escena I
Escena II
Escena III

1.2
Planos de corte
Preparando el espacio de visualizacin
Nilton A. Garcia
Hilares

Recordemos la la funcin reshape()

void reshape (int w, int h){


glViewport (0, 0, (GLsizei) w, (GLsizei) h); Introduccin
Volumen de visualizacin
glMatrixMode (GL_PROJECTION); Planos de corte
glLoadIdentity (); Clipping planes

glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); Aplicacin


Escena
glMatrixMode (GL_MODELVIEW); Planos de corte
Habilitar planos de corte
} Inhabilitar planos de corte
Combinando planos de
corte
El funcionamiento de esta funcin ya lo habamos comentado Ejercicios
antes, ahora solo vamos a precisar con mas detalle la instancia Escena I
Escena II
Escena III

glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);

La cual define el volumen de visualizacin

1.3
Planos de corte
Preparando el espacio de visualizacin
Nilton A. Garcia
para glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); tenemos Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.4
Planos de corte
Planos de corte
Nilton A. Garcia
Hilares

En adicin a los 6 planos de corte que generan el volumen de


visualizacin (left, right, bottom, top, near, far), puedes definir
hasta 6 planos de corte adicionales para mayores restricciones
en le volumen de visualizacin. Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

Esto es muy til para remover objetos externos en una escena,


por ejemplo si deseas mostrar una vista cortada de un objeto.

1.5
Planos de corte
Clipping planes
Nilton A. Garcia
Hilares

Formato
void glClipPlane( GLenum plane, const GLdouble * equation);

plane Especifica que plano sera posicionado. Nombre Introduccin


Volumen de visualizacin
simbolico de la forma GL_CLIP_PLANEi, donde Planos de corte
i es un entero entre 0 y Clipping planes

GL_MAX_CLIP_PLANES -1. Aplicacin


Escena

equation Especifica la direccin del array , cuyos valores Planos de corte


Habilitar planos de corte
son interpretados como el plano. Inhabilitar planos de corte
Combinando planos de
corte
Cada plano es especificado por los coeficientes de la ecuacin Ejercicios
Escena I

Ax + By + Cz + D = 0 Escena II
Escena III

Los planos de corte son automtica y adecuadamente


transformados por las transformaciones de modelado y
visualizacin.

1.6
Planos de corte
Clipping planes
Nilton A. Garcia
Hilares

El volumen de corte se concierte en la interseccin del


volumen de visualizacin y todos los sub espacios
definidos por el plano de corte adiciona. Recuerda que
para los polgonos que son cortados sus bordes sern
automticamente reconstruidos por OpenGL. Introduccin
Volumen de visualizacin

Para habilitar y inhabilitar los planos de corte, utiliza Planos de corte

glEnable y glDisable con el argumento Clipping planes

Aplicacin
GL_CLIP_PLANEi, donde i es el numero del plano que Escena

quieres habilitar o inhabilitar respectivamente. Planos de corte


Habilitar planos de corte
Inhabilitar planos de corte
Todas las implementaciones de OpenGL deben soportar Combinando planos de
corte
por lo menos 6 planos de corte adicionales, adems
Ejercicios
algunas implementaciones pueden permitir mas planos. Escena I
Escena II
Puedes usar glGetIntegerv(GL_MAX_CLIP_PLANES) Escena III

para hallar cuantos planos son soportados.


Todos los planos de corte estn definidos inicialmente
como (0, 0, 0, 0) en el sistema cannico de coordenadas y
estn inhabilitados

1.7
Planos de corte
Tetera para t
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.8
Planos de corte
Escena
Nilton A. Garcia
Hilares

Consideremos la funcin display de la escena anterior


display()
void display(void) {
glClearColor (0.0, 0.0, 0.0, 0.0);
Introduccin
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Volumen de visualizacin

glLoadIdentity (); Planos de corte


Clipping planes
switch (Vista %4) {
Aplicacin
case 1: gluLookAt (12,0,0, 0, 0, 0, 0.0, 1.0, 0.0); break; Escena

case 2: gluLookAt (0,8,0, 0, 0, 0, 0.0, 0.0, -1.0); break; Planos de corte


Habilitar planos de corte
case 3: gluLookAt (0,0,8, 0, 0, 0, 0.0, 1.0, 0.0); break; Inhabilitar planos de corte

default: gluLookAt (5,5,10, 0, 0, 0, 0.0, 1.0, 0.0); break; Combinando planos de


corte

} Ejercicios
Ejes(2); Escena I
Escena II
glColor3f(0.3,0.4,0.2); Escena III

glutWireTeapot(10);
glFlush ();
glutSwapBuffers();
}

1.9
Planos de corte
Escena
Nilton A. Garcia
Y tambin la funcin key() Hilares

key()
void key(unsigned char key, int x, int y){
switch (key) {
case s:{
Solid =! Solid; break; Introduccin
Volumen de visualizacin
} Planos de corte
case 32:{ Clipping planes

Vista- -; Aplicacin
Escena
if (Vista<1) Vista=4; Planos de corte

break; Habilitar planos de corte


Inhabilitar planos de corte
} Combinando planos de
corte
case 27 :
Ejercicios
case q: { Escena I

exit(EXIT_SUCCESS); break; Escena II


Escena III
}
}
glutPostRedisplay();
}

Note que la funcin display() y key() , estn utilizando la


variable global Vista. 1.10
Planos de corte
Planos de corte
Nilton A. Garcia
Primero consideremos algunos casos prcticos de la ecuacin Hilares

del plano en el espacio xyz


Ax + By + Cz + D = 0
B = C = D = 0 y A = 1, corresponde al plano x = 0, como
A > 0 entonces la region correspondiente a x < 0 se cortar del Introduccin
volumen de visualizacin. Volumen de visualizacin

B = C = D = 0 y A = 1, corresponde al plano x = 0, como Planos de corte


Clipping planes
A < 0 entonces la region correspondiente a x > 0 se cortar del
Aplicacin
volumen de visualizacin. Escena
Planos de corte
A = C = D = 0 y B = 1, corresponde al plano y = 0, como Habilitar planos de corte
B > 0 entonces la region correspondiente a y < 0 se cortar del Inhabilitar planos de corte
Combinando planos de
volumen de visualizacin. corte

A = C = D = 0 y B = 1, corresponde al plano y = 0, como Ejercicios


Escena I
B < 0 entonces la region correspondiente a y > 0 se cortar del Escena II

volumen de visualizacin. Escena III

A = B = D = 0 y C = 1, corresponde al plano z = 0, como


C > 0 entonces la region correspondiente a z < 0 se cortar del
volumen de visualizacin.
A = B = D = 0 y C = 1, corresponde al plano z = 0, como
C < 0 entonces la region correspondiente a z > 0 se cortar del
volumen de visualizacin. 1.11
Planos de corte
Planos de corte
Nilton A. Garcia
Hilares

A la funcin display() anterior, le agregaremos algunos planos


de corte, como por ejemplo queremos recortar la region y < 0,
para eso
display()
Introduccin

void display(void) { Volumen de visualizacin

Planos de corte
.. Clipping planes
.
Aplicacin
Ejes(2); Escena

GLdouble eqn[4] = { 0.0, 1.0, 0.0, 0.0 }; Planos de corte


Habilitar planos de corte

glClipPlane (GL_CLIP_PLANE0, eqn); Inhabilitar planos de corte


Combinando planos de
glEnable (GL_CLIP_PLANE0); corte

Ejercicios
glColor3f(0.3,0.4,0.2); Escena I

glutWireTeapot(10); Escena II
Escena III
..
.
}

Modificamos el cdigo como se muestra

1.12
Planos de corte
Cortando el volumen y < 0
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.13
Planos de corte
Cortando el volumen y < 0
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.14
Planos de corte
Planos de corte
Nilton A. Garcia
Hilares

A la funcin display() anterior, le agregaremos un nuevo plano


de corte
display()
void display(void) { Introduccin
.. Volumen de visualizacin

. Planos de corte

Ejes(2); Clipping planes

Aplicacin
GLdouble eqn1[4] = { 0.0, -1.0, 0.0, 0.0 }; Escena

glClipPlane (GL_CLIP_PLANE1, eqn1); Planos de corte


Habilitar planos de corte

glEnable (GL_CLIP_PLANE1); Inhabilitar planos de corte


Combinando planos de
glColor3f(1,0.1,0.2); corte

glutWireTeapot(10); Ejercicios
Escena I
.. Escena II
. Escena III

Modificamos el cdigo como se muestra para obtener las


escenas siguientes

1.15
Planos de corte
Cortando el volumen y > 0
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.16
Planos de corte
Cortando el volumen y > 0
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.17
Planos de corte
Inhabilitar planos de corte
Nilton A. Garcia
Hilares

Ya habamos visto que para habilitar y inhabilitar los planos de


corte, utiliza glEnable y glDisable con el argumento
GL_CLIP_PLANEi, donde i es el numero del plano que
quieres habilitar o inhabilitar respectivamente.
Introduccin
Por que debemos inhabilitar un plano de corte? Volumen de visualizacin

Planos de corte
Clipping planes

Ejemplo Aplicacin
Escena
Planos de corte
Considere la escena donde se renderiz la tetera para t, y se Habilitar planos de corte

corto el volumen de visualizacin y < 0. Si se ejecutan las Inhabilitar planos de corte


Combinando planos de

siguientes instrucciones: corte

Ejercicios
glTranslatef(0,-5,0); Escena I
Escena II

glColor3f(0.7,0.2,0.7); Escena III

glWireSphere(4,20,20);
Despus de activar el plano de corte, que es lo que pasa con
la escena?

1.18
Planos de corte
Hubo algn cambio?
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.19
Planos de corte
Planos de corte
Nilton A. Garcia
Ahora solo desactivemos el plano de corte antes de las Hilares

instrucciones anteriores
display()
void display(void) {
..
. Introduccin
Volumen de visualizacin
Ejes(2); Planos de corte
GLdouble eqn[4] = { 0.0, 1.0, 0.0, 0.0 }; Clipping planes

glClipPlane (GL_CLIP_PLANE0, eqn); Aplicacin


Escena
glEnable (GL_CLIP_PLANE0); Planos de corte
Habilitar planos de corte
glColor3f(0.3,0.4,0.2); Inhabilitar planos de corte

glutWireTeapot(10); Combinando planos de


corte

glDisable(GL_CLIP_PLANE0); Ejercicios
Escena I
glTranslatef(0,-5,0); Escena II

glColor3f(0.7,0.2,0.7); Escena III

glutWireSphere(4,20,20);
..
.
}

Modificamos el cdigo como se muestra 1.20


Planos de corte

Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.21
Planos de corte

Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.22
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Ten en cuenta lo siguiente:


Cuando habilitas un plano de corte, este afecta a todo lo
que se renderiza despus de la activacin de dicho plano. Introduccin
Volumen de visualizacin

Cuando habilitas un plano de corte, este no afecta a lo Planos de corte

que fue renderizado. Clipping planes

Aplicacin
De pendiendo de como habilites e inhabilites los planos Escena
Planos de corte
de corte los resultados que obtengas al renderizar sern Habilitar planos de corte
Inhabilitar planos de corte
distintos. Combinando planos de
corte
con los planos de corte, y las primitivas 3D puedes crear Ejercicios
modelos wireframe 3D mas sutiles y sin tanta Escena I
Escena II
superposicin de mallas en los interiores del objeto Escena III

modelado

1.23
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Teniendo en cuenta los planos

y = 0 y = 0 Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes
Ejercicio
Aplicacin
Renderizar una tetera donde la mitad superior de ella sea de Escena
Planos de corte
color verde y la mitad inferior sea de color rojo Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de

Recuerda que dichos planos ya los hemos utilizado antes corte

Ejercicios
y = 0 tiene las constantes A = C = D = 0 y B = 1. Escena I
Escena II

y = 0 tiene las constantes A = C = D = 0 y B = 1 . Escena III

1.24
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.25
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.26
Planos de corte
Planos de corte
Nilton A. Garcia
Las escenas anteriores se pueden obtener con las siguientes Hilares

modificaciones
display()
void display(void) {
..
. Introduccin
Ejes(2); Volumen de visualizacin

GLdouble eqn[4] = 0.0, 1.0, 0.0, 0.0; Planos de corte


Clipping planes
GLdouble eqn1[4] = {0.0, -1.0, 0.0, 0.0}; Aplicacin
glClipPlane (GL_CLIP_PLANE0, eqn); Escena
Planos de corte
glClipPlane (GL_CLIP_PLANE1, eqn1); Habilitar planos de corte
glEnable (GL_CLIP_PLANE0); Inhabilitar planos de corte
Combinando planos de
glColor3f(0.3,0.4,0.2); corte

glutWireTeapot(10); Ejercicios
Escena I
glDisable(GL_CLIP_PLANE0); Escena II

glEnable (GL_CLIP_PLANE1); Escena III

glColor3f(1,0.1,0.2);
glutWireTeapot(10);
glDisable(GL_CLIP_PLANE1);
..
.
}
1.27
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.28
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.29
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.30
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.31
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.32
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.33
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.34
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.35
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.36
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.37
Planos de corte
Combinando planos de corte
Nilton A. Garcia
Hilares

Introduccin
Volumen de visualizacin

Planos de corte
Clipping planes

Aplicacin
Escena
Planos de corte
Habilitar planos de corte
Inhabilitar planos de corte
Combinando planos de
corte

Ejercicios
Escena I
Escena II
Escena III

1.38

También podría gustarte