Ich arbeite mit OpenGL und ich versuche, eine Kugel zu schaffen, die eine reflektierende Oberfläche hat. Ich habe es reflektiert, aber die Reflexion ist nicht korrekt. Das Objekt in der Reflexion sollte entsprechend der Krümmung der Oberfläche gebogen und deformiert werden, stattdessen bekomme ich nur eine geradlinige Reflexion. Ich habe GL_STENCIL nicht viel benutzt, also würde Hilfe sehr geschätzt werden. Ich habe Teile des Codes zur Verfügung gestellt, wie die Erstellung der Kugel und die Zeichenmethode. Wenn jemand mehr braucht, lass es mich wissen.OpenGL mit GL_STENCIL mit einer Kugel
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 GL_STENCIL zu verwenden war ich nicht sicher, ob es nur etwas klein oder wenn viel mehr muss getan werden, um nachzuweisen dieser Winkel der Reflexion.
BTW- Ihr Leben wird wahrscheinlich einfacher, wenn das erste, was Sie tun, ist die Verwendung von Shadern. Die Schablonenreflexion "biegt" sich nicht von Natur aus. – Kos