Я не могу заставить свою теневую систему работать правильно. Я использую следующий код для создания моих FBO:Глубинный буфер FBO красный
int frameBuffer = GL30.glGenFramebuffers();
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBuffer);
GL11.glDrawBuffer(GL11.GL_NONE);
GL11.glReadBuffer(GL11.GL_NONE);
int texture = GL11.glGenTextures();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT16, WIDTH, HEIGHT, 0,
GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (ByteBuffer) null);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, texture, 0);
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
GL11.glViewport(0, 0, Display.getDisplayMode().getWidth(), Display.getDisplayMode().getHeight());
Мои объекты оказывают штраф в моем умолчанию визуализатора (выход vec4). Моя тень шейдер код прямо вперед:
#version 430
layout(location = 0) out float fragmentdepth;
void main(void){
fragmentdepth = gl_FragCoord.z;
}
Я попытался вывести vec4 (1.0) без использования каких-либо FBOs, и все это прекрасно работает, так что мои расчеты верны и мои шейдерных коды должны работать.
Мой вызов отрисовки выглядит следующим образом:
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBuffer);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT|GL11.GL_DEPTH_BUFFER_BIT);
renderShadows();
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
renderAllItems();
Display.sync(FPS_CAP);
Display.update();
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT|GL11.GL_DEPTH_BUFFER_BIT);
GL11.glClearColor(0.2f,0.1f,0.1f , 1f);
, когда я называю "renderAllItems();" Я также делаю квадрат в верхнем правом углу, который должен отображать мою текстуру глубины. Но все, что я вижу, это красный квадрат. Не должно ли оно быть черно-белым и что-то показывать?
«Я не могу заставить свою теневую систему работать правильно». -> «Я не могу заставить свою теневую систему работать правильно». – Unknown
Буфер глубины не является цветом, он хранит глубину. Это один компонент, хотя и это можно интерпретировать как любой цвет, который вы хотите. Обычно он становится красным. –
"* Не должен ли он быть черно-белым и показывать что-то? *" Вы представляете его как "черный/белый"? –