我想在一个小小的3D世界中添加雾,我试着摆弄这些争论,然而,雾不均匀。
我有两个可能相关的问题:
雾同质性:
当我使用gluLookAt移动或旋转我的视点时,雾太重,整个世界都是灰色的。但是,雾的渲染是两个很好的角度。
当Y轴上的相机蚀刻为45°或-135°(相反)时雾似乎正常
以场景的原点为中心的雾:
当我的雾正确显示时,它以场景的(0; 0; 0)为中心
这是我用来初始化雾和调用gluLookAt
的代码private static final float density = 1f;
private void initFog() {
float[] vertices = {0.8f, 0.8f, 0.8f, 1f};
ByteBuffer temp = ByteBuffer.allocateDirect(16);
temp.order(ByteOrder.nativeOrder());
FloatBuffer fogColor = temp.asFloatBuffer();
fogColor.put(vertices);
GL11.glClearColor(0.8f,0.8f,0.8f,1.0f);
GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR);
GL11.glFog(GL11.GL_FOG_COLOR, temp.asFloatBuffer());
GL11.glFogf(GL11.GL_FOG_DENSITY, density);
GL11.glHint(GL11.GL_FOG_HINT, GL11.GL_FASTEST);
GL11.glFogf(GL11.GL_FOG_START, 1f);
GL11.glFogf(GL11.GL_FOG_END, 10000f);
}
private void initWindow() {
try {
Display.setDisplayMode(new DisplayMode(1600, 900));
Display.create();
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GLU.gluPerspective(60f, 1600f / 900f, 3, 100000);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glEnable(GL11.GL_FOG);
GL11.glEnable(GL11.GL_DEPTH_TEST);
initFog();
initParticles();
} catch (LWJGLException e) {
Display.destroy();
System.exit(1);
}
}
从主循环内的updatePosition函数调用 angle参数是y轴上视口的方向,yCpos是-1和1之间的值,用于向上或向下查看。
GL11.glLoadIdentity();
GLU.gluLookAt(xpos, ypos, zpos, xpos + (float)Math.cos(angle), ypos+ yCpos, zpos+ (float)Math.sin(angle), 0, 1, 0);
答案 0 :(得分:1)
我正在用一个巨大的四边形画地面,现在我用瓷砖画地面,问题不再发生了。因此,原因仍然是神秘的,但问题已经解决了。