0

LWJGL を使用して 3D モデルの読み込み、レンダリング、およびライティングに取り組んできました。ほとんどの場合は機能しますが、現在照明に問題があります。照明の法線だと思いますが、修正できません。これが問題の写真です。

ここに画像の説明を入力

照明コード:

public class Light {

private Vector4f position;

public Light(Vector3f position)
{
    this.position = new Vector4f(position.x, position.y, position.z, 1);

    glShadeModel(GL_SMOOTH);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightModel(GL_LIGHT_MODEL_AMBIENT, getFlipedFloatBuffer(new Vector4f(0.05f, 0.05f, 0.05f, 1)));
    glLight(GL_LIGHT0, GL_POSITION, getFlipedFloatBuffer(this.position));
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glEnable(GL_COLOR_MATERIAL);
    glColorMaterial(GL_FRONT, GL_DIFFUSE);
}

private FloatBuffer getFlipedFloatBuffer(Vector4f values)
{
    return (FloatBuffer)BufferUtils.createFloatBuffer(4).put(new float[]{values.x, values.y, values.z, values.w}).flip();
}

public void update() {
    glLight(GL_LIGHT0, GL_POSITION, getFlipedFloatBuffer(this.position));
}
}
4

1 に答える 1

0

法線の方向が均一ではありません。ジオメトリから自分で法線を計算する場合は、最初にすべての法線を再調整して、同じ表面方向を指すようにする必要があります。ただし、このアルゴリズムを正しく理解するのは少し面倒です。

モデルを 3D モデラーにロードし、そのモデラーの「Fix Normal Orientation」ツールを使用して、モデルを法線と一緒に保存することをお勧めします。Blender には、ホットキー CTRL+N でアクセスできる機能があります

于 2012-12-15T16:24:19.600 に答える