Question

Je travaille avec OpenGL et je suis en train de créer une sphère qui a une surface réfléchissante. Je l'ai réfléchissait, mais la réflexion n'est pas correct. L'objet de la réflexion doit être plié et déformé selon la courbure de la surface, au lieu j'obtenir seulement une réflexion rectiligne. Je ne l'ai pas utilisé GL_STENCIL si bien aide serait très apprécié. J'ai fourni des morceaux de code tels que la création de la sphère et la méthode de tirage au sort. Si quelqu'un a besoin de plus me le faire savoir.

Création:

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

Dessin:

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

Depuis que je suis nouveau à l'utilisation GL_STENCIL je ne savais pas si elle est juste un petit quelque chose ou s'il reste beaucoup à faire pour détecter l'angle de réflexion.

Était-ce utile?

La solution

Avez-vous pensé à utiliser la réflexion / environnement mapping

Il existe 2 formes principales. Spherical environment mapping fonctionne généralement en ayant un environnement de pré-calculé carte. Il peut, cependant, été fait dynamiquement. Son principal inconvénient est qu'il est vue dépendante.

L'autre système est cartographie environnement cubique . Cubique est très facile à mettre en place et implique de rendre simplement votre scène 6 fois dans 6 direction différente (par exemple sur chaque face du cube). Cubique cartographie env est une vue indépendante.

Il existe un autre système qui se trouve entre sphérique et cubique. Son appelé double la cartographie de l'environnement paraboloïde. Il a le dos d'étirage qui générer les deux paraboloïdes est assez complexe (comme sphérique), mais (comme cube) est vue indépendant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top