2

回転させたい立方体があります。光源 GL_LIGHT0 もあります。立方体を回転させ、光源をその位置に固定したままにします。しかし、光源はキューブと一緒に回転しています。私は OpenGL ES 1.1 を使用しています。質問をより明確にするために、コードのスニペットを次に示します。

GLfloat glfarr[] = {...} //cube points
GLubyte glubFaces[] = {...}
Vertex3D normals[] = {...} //normals to surfaces

const GLfloat light0Position[] = {0.0, 0.0, 3.0, 0.0};
glLightfv(GL_LIGHT0, GL_POSITION, light0Position);
glEnable(GL_LIGHT0);

for(i = 0; i < 8000; ++i)
{
        if (g_bDemoDone) break;
        glLoadIdentity();

        glTranslatef(0.0,0.0, -12); 
        glRotatef(rot, 0.0, 1.0,1.0);
        rot += 0.8;
        glClearColor(0, 0, 0, 1);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_NORMAL_ARRAY);

        glNormalPointer(GL_FLOAT, 0, normals);

        glVertexPointer(3, GL_FLOAT, 0, glfarr);
        glDrawElements(GL_TRIANGLES, 3*12, GL_UNSIGNED_BYTE, glubFaces);

        glDisableClientState(GL_NORMAL_ARRAY);
        glDisableClientState(GL_VERTEX_ARRAY);
        eglSwapBuffers(eglDisplay, eglSurface);
}

ありがとう。

4

2 に答える 2

2

何に関連して修正されましたか?ライトの位置は、現在の MODELVIEW マトリックスによって変換されます。glLightfv(GL_LIGHT0, GL_POSITION, light0Position);

立方体と一緒に移動したい場合は、移動glLightfv(GL_LIGHT0, GL_POSITION, light0Position);と回転の呼び出しの後に移動する必要があります。

于 2010-08-18T18:52:04.390 に答える
0

問題は、キューブ自体ではなく、モデルビューマトリックスを回転させていることのようです。基本的に、あなたはカメラを動かしています。

立方体だけを回転させるには、立方体を構成する頂点を回転させる必要があります。通常、これはライブラリ(GLUTなど)または単純なトリガーを使用して行われます。glDrawElementsを呼び出す前に、配列に格納されている頂点データを操作します。法線またはテクスチャ座標を変更する必要がある場合と変更したくない場合があります。これは、効果と最終的にどのように見えるかによって異なります。

于 2010-08-18T18:47:10.097 に答える