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 建模器中,使用该建模器的“修复法线方向”工具并将模型与法线一起保存。Blender 具有通过热键 CTRL+N 访问的功能

于 2012-12-15T16:24:19.600 回答