Domanda

sto lavorando con OpenGL e sto cercando di creare una sfera che ha una superficie riflettente. L'ho riflettendo ma la riflessione non è corretta. L'oggetto nella riflessione deve essere piegato e deformato secondo la curva della superficie, invece sto ottenendo solo un riflesso diritta. Non ho usato GL_STENCIL tanto aiuto sarebbe molto apprezzato. Ho fornito pezzi di codice come la creazione della sfera e il metodo draw. Se qualcuno ha bisogno di più me lo faccia sapere.

di creazione:

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

Disegno:

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

Dal momento che sono nuovo di utilizzare GL_STENCIL non ero sicuro se è solo qualcosa di piccolo o se molto di più deve essere fatto per rilevare che l'angolo di riflessione.

È stato utile?

Soluzione

Hai pensato di usare riflessione / ambiente mappatura ?

Ci sono 2 forme principali. sferica ambiente mappatura di solito funziona da avere una mappa ambiente pre-calcolato. Si può, tuttavia, è stata fatta in modo dinamico. Lo svantaggio principale è che è vista dipendente.

L'altro sistema è Ambiente Cubic mappatura . Cubic è molto facile da configurare e comporta semplicemente rendendo la scena 6 volte in 6 direzione diversa (cioè ad ogni faccia del cubo). mappatura ENV Cubic è vista indipendente.

C'è un altro sistema che si trova tra sferica e cubica. La sua chiamata dual paraboloide ambiente mappatura . Ha la schiena pareggio che genera il duplice paraboloidi è piuttosto complessa (come sferico) ma (come cubica) è vista indipendente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top