2

「世界」(法線付き)にいくつかの立方体モデルとランタンモデルがあり、特定の座標に配置された光源があります。モデルを移動しようとすると問題が発生し、光源の位置がフレームごとにビューポートの位置に変わります。以下は、ライティング init を含むコードの初期化部分です。

GL11.glEnable(GL11.GL_TEXTURE_2D);
            GL11.glShadeModel(GL11.GL_SMOOTH);
            GL11.glClearDepth(1.0f);
            GL11.glClearColor(0.0f, 0.75f, 1.0f, 1);
            GL11.glEnable(GL11.GL_CULL_FACE);
            GL11.glEnable(GL11.GL_BLEND);  
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            GL11.glDepthFunc(GL11.GL_LESS);
            GL11.glMatrixMode(GL11.GL_PROJECTION);
            GL11.glLoadIdentity();

            GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
            ByteBuffer temp = ByteBuffer.allocateDirect(16);
            temp.order(ByteOrder.nativeOrder());
            byf = temp;
            GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(lightAmbient).flip());              // Setup The Ambient Light
            GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(lightDiffuse).flip());              // Setup The Diffuse Light
            GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(lightPosition).flip());         // Position The Light
            GL11.glEnable(GL11.GL_LIGHT1);
            GL11.glEnable(GL11.GL_LIGHTING);

            GL11.glMatrixMode(GL11.GL_MODELVIEW);
            GL11.glLoadIdentity();


            GL11.glFogi(GL11.GL_FOG_MODE, fogMode[fogfilter]);                 
            temp.asFloatBuffer().put(fogColor).flip();
            GL11.glFog(GL11.GL_FOG_COLOR, temp.asFloatBuffer());             
            GL11.glFogf(GL11.GL_FOG_DENSITY, 0.35f);                           
            GL11.glHint(GL11.GL_FOG_HINT, GL11.GL_DONT_CARE);                  
            GL11.glFogf(GL11.GL_FOG_START, 1.0f);                               
            GL11.glFogf(GL11.GL_FOG_END, 5.0f);                                
            GL11.glEnable(GL11.GL_FOG); 

同様の問題がいくつか見られましたが、それらの解決策はまったく役に立ちませんでした。問題は、マトリックスを設定する順序が不規則であることはわかっていますが、どのマトリックス (マトリックス) とどこを変更すればよいかわかりません。ライティングの初期化の前に Modelview マトリックスの設定を配置しようとしましたが、うまくいきませんでした。

ところで、私はフレームごとに正しいライト位置を設定したくありません。私には機能しますが、レンダリングが遅くなる可能性があります。

4

1 に答える 1

0

おそらく、これまたは glulookat() に似たコードを使用しているでしょう。

GL11.glTranslatef(Camera.x, Camera.y, Camera.z);
GL11.glRotatef(Camera.roatationz, 0.0f, 0.0f, 1.0f);
GL11.glRotatef(Camera.roatationx, 1.0f, 0.0f, 0.0f);
GL11.glRotatef(Camera.roatationy, 0.0f, 1.0f, 0.0f);

//Render stuff here

あなたの光も動かなければなりません。:)

于 2013-08-02T01:26:42.037 に答える