1

それで、私は OpenGL をいじり始めたばかりで、小さなボクセル レンダリングを作成することにしました。照明を当てようとしているのですが、y 軸を中心にカメラを回転させると奇妙な効果が発生します。たとえば、最初にスポーンすると、ライトは次のようになります。

http://i.stack.imgur.com/zQ49y.png

しかし、少し回転すると、次のようになります。

http://i.stack.imgur.com/PWvVo.png

これを行うコードは次のとおりです。

    glRotatef(xrot, 1.0f, 0.0f, 0.0);
    glRotatef(yrot, 0.0f, 1.0f, 0.0);

    glTranslatef(-3.5f-xcam, ycam, -3.5f-zcam);

    glEnable (GL_DEPTH_TEST); //enable the depth testing
    glEnable (GL_LIGHTING); //enable the lighting
    glEnable (GL_LIGHT0);

    GLfloat specular[] = {1.0f-xcam, ycam+1.0, 1.0f-zcam, 1.0};
    glLightfv(GL_LIGHT0, GL_SPECULAR, specular);

    glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D, grnd);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    glBegin(GL_QUADS);

    glTexCoord2i(0, 0);
    glVertex3f(0, 0, 0);

    glTexCoord2i(0, 1);
    glVertex3f(0, 0, 7.0f);

    glTexCoord2i(1, 1);
    glVertex3f(7.0f, 0, 7.0f);

    glTexCoord2i(1, 0);
    glVertex3f(7.0f, 0, 0);

    glEnd();

    glDisable(GL_TEXTURE_2D);

    glLoadIdentity();

    drawVoxel(2.f, 0.f, 2.f, tex);
    drawVoxel(1.f, 0.f, 1.f, tex);
    drawVoxel(2.f, 0.f, 2.f, tex);
    drawVoxel(3.f, 0.f, 3.f, tex);

    drawVoxel(4.f, 0.f, 4.f, tree);
    drawVoxel(4.f, 1.f, 4.f, tree);
    drawVoxel(4.f, 2.f, 4.f, tree);
    drawVoxel(4.f, 3.f, 4.f, tree);

    test.Flip();

何が起こっているのか誰にも分かりませんか?

4

1 に答える 1

4

glNormal3f() も使用する必要があります。

.
.
.

glBegin(GL_QUADS);

glTexCoord2i(0, 0);
glNormal3f(0,1,0);
glVertex3f(0, 0, 0);

glTexCoord2i(0, 1);
glNormal3f(0,1,0);
glVertex3f(0, 0, 7.0f);

glTexCoord2i(1, 1);
glNormal3f(0,1,0);
glVertex3f(7.0f, 0, 7.0f);

glTexCoord2i(1, 0);
glNormal3f(0,1,0);
glVertex3f(7.0f, 0, 0);

glEnd();
于 2012-09-14T01:55:14.377 に答える