4

私はOpenGLを使用していて、反射面を持つ球を作成しようとしています。私はそれを反映していますが、反射は正しくありません。反射のオブジェクトは、サーフェスのカーブに従って曲げたり変形したりする必要があります。代わりに、まっすぐな反射しか得られません。私はGL_STENCILをあまり使用していませんので、助けていただければ幸いです。球の作成や描画メソッドなどのコードを提供しました。誰かがもっと必要な場合は私に知らせてください。

作成:

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

描く:

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

GL_STENCILを使用するのは初めてなので、それが小さなものなのか、それともその反射角度を検出するためにさらに多くのことを行う必要があるのか​​がわかりませんでした。

4

1 に答える 1

2

リフレクション/環境マッピングの使用を検討しましたか?

2つの主要な形式があります。 球形環境マッピングは通常、事前に計算された環境マップを使用することで機能します。ただし、動的に実行できます。その主な欠点は、ビューに依存することです。

もう1つのシステムは、キュービック環境マッピングです。Cubicはセットアップが非常に簡単で、シーンを6つの異なる方向(つまり、立方体の各面)に6回レンダリングするだけです。キュービック環境マッピングはビューに依存しません。

球形と立方体の間にある別のシステムがあります。その呼ばれる二重放物面環境マッピング。二重放物面の生成は非常に複雑(球形のように)ですが、(立方体のように)ビューに依存しないという欠点があります。

于 2010-12-04T22:10:30.287 に答える