Pregunta

Estoy trabajando con OpenGL y estoy tratando de crear una esfera que tiene una superficie reflectante. Tengo que refleja que el reflejo no es correcto. El objeto de la reflexión debe ser doblada y deformada de acuerdo a la curva de la superficie, en lugar que estoy recibiendo sólo un reflejo directo. No he utilizado GL_STENCIL el punto de ayuda sería muy apreciada. He proporcionado piezas de código tales como la creación de la esfera y el método de sorteo. Si alguien necesita más que me haga saber.

Creación:

sphere = gluNewQuadric();
gluQuadricDrawStyle(sphere,  GLU_FILL);
gluQuadricNormals(sphere, GLU_SMOOTH);
gluSphere(sphere, 1, 100, 100);
gluDeleteQuadric(sphere);

Dibujo:

glClearColor (0.0,0.0,0.0,1);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glLoadIdentity();

glTranslatef(0, 0, -10);

glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); //disable the color mask
glDepthMask(GL_FALSE); //disable the depth mask
glEnable(GL_STENCIL_TEST); //enable the stencil testing
glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); //set the stencil buffer to replace our data

sphereDraw(); //the mirror surface

glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); //enable the color mask
glDepthMask(GL_TRUE); //enable the depth mask

glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); //set the stencil buffer to keep our next lot of data

glPushMatrix();
glScalef(1.0f, -1.0f, 1.0f); //flip the reflection vertically
glTranslatef(0,2,-20); //translate the reflection onto the drawing plane
glRotatef(angle,0,1,0); //rotate the reflection
//draw object as our reflection
glPopMatrix();

glDisable(GL_STENCIL_TEST); //disable the stencil testing

glEnable(GL_BLEND); //enable alpha blending
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //set the blending function
sphereDraw(); //draw our bench
glDisable(GL_BLEND); //disable alpha blending

//draw object

Ya que soy nuevo en el uso GL_STENCIL no estaba seguro de si es sólo algo pequeño o si aún queda mucho por hacer para detectar que ángulo de reflexión.

¿Fue útil?

Solución

Ha considerado el uso mapeo de reflexión / entorno ?

Hay 2 formas principales. esférico mapeo ambiente por lo general trabaja por tener un mapa de entorno de pre-calculada. Puede, sin embargo, se ha hecho de forma dinámica. Su principal inconveniente es que es dependiente de vista.

El otro sistema es Medio Ambiente Cubic mapeo . Cúbico es muy fácil de configurar e implica simplemente la representación de la escena 6 veces en 6 dirección diferente (es decir, en cada cara del cubo). mapeo env cúbico es vista independiente.

Hay otro sistema que se encuentra entre esférica y cúbico. Se llama doble paraboloide mapeo medio ambiente. Tiene la parte posterior sorteo que la generación de la doble paraboloides es bastante compleja (como esférica), pero (como cúbico) es vista independiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top