Frage

Ich arbeite mit OpenGL und ich versuche, eine Kugel zu schaffen, die eine reflektierende Oberfläche aufweist. Ich habe es reflektiert aber die Reflexion ist nicht korrekt. Das Objekt in der Reflexion sollte gebogen und verformt entsprechend die Kurve der Oberfläche, sondern nur eine gerade Reflexion ich erhalte. Ich habe nicht viel GL_STENCIL verwendet, so Hilfe sehr geschätzt würde. Ich habe Teile des Codes vorgesehen, wie die Erstellung der Kugel und das Ziehverfahren. Wenn jemand braucht mehr lassen Sie mich wissen.

Creation:

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

Zeichnung:

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

Da ich neu bin auf GL_STENCIL ich mit war sich nicht sicher, ob es nur etwas klein oder wenn viel mehr getan werden muss, dass der Winkel der Reflexion zu erkennen.

War es hilfreich?

Lösung

Haben Sie darüber nachgedacht, Reflexions- / Umgebungs-Mapping mit?

Es gibt zwei Hauptformen. Spherical Environment Mapping arbeitet in der Regel durch eine vorausberechneten Umgebungskarte mit. Es kann jedoch wurde dynamisch erfolgen. Sein Hauptnachteil ist, dass es Ansicht abhängig ist.

Das andere System ist Cubic Environment Mapping . Cubic ist sehr einfach einzurichten und beinhaltet einfach Ihre Szene 6 mal in 6 verschiedenen Richtung Rendering (dh auf jeder Seite des Würfels). Cubic env-Mapping ist eine Ansicht unabhängig.

Es ist ein anderes System, das zwischen sphärischen und kubischen sitzt. Seine genannt Dual Paraboloid Environment Mapping . Es hat den Nachteil, dass die Dual Paraboloide Erzeugung sehr komplex ist (wie sphärisch), aber (wie kubisch) es Ansicht unabhängig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top