Эффект от OpenGL отключается при перемещении или повороте камеры
Вопрос
Я хочу добавить туман в небольшой 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);
}
}
.
Вызывается из функции обновления внутри основного цикла Параметр угла - это направление области просмотра на оси 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);
.Решение
Я рисовал землю одним гигантским квадроциклом, и теперь я рисую землю плитками, и проблема больше не происходит.Следовательно, причина остается загадочной, но проблема решена.