1
我需要你的幫助了。我想使用大於屏幕尺寸的Frame Buffer Object。當我做到這一點時,FBO 1024 x 1024的分辨率會在1024 x 768分辨率下從頂部切斷。我自己找不到解決方案 - 這就是爲什麼我要問。FBO lwjgl比屏幕尺寸大 - 我做錯了什麼?
代碼的第一部分是我創建FBO的方式,我在激活和停用之間進行渲染。之後我使用紋理。
我在做什麼錯?
什麼是清除幀緩衝區對象重用的最快方法?
public FrameBufferObject(int width, int height) {
this.width = width;
this.height = height;
texture = glGenTextures();
frameBufferObject = GL30.glGenFramebuffers();
activate();
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_BYTE, BufferUtils.createByteBuffer(4 * width * height));
GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
deactivate();
}
public void activate() {
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, frameBufferObject);
}
public void deactivate();
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
}
OpenGL設置:
private static void initializeOpenGL() {
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_MULTISAMPLE);
glEnable(GL_BLEND);
glEnable(GL_SCISSOR_TEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glOrtho(0, Display.getWidth(), Display.getHeight(), 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glClearColor(0, 0, 0, 0);
}
非常感謝您的回答。我已經嘗試過,但一切都變得艱難。那麼我必須解決這個問題。再次感謝你。 – Przemek 2015-02-11 09:23:28
那麼,你不能將你最初渲染成1024x768表面的內容填充到1024x1024表面而不會被拉伸。如果您使用的是投影矩陣,則可能也必須對其進行調整,因爲它通常包含曲面的高寬比。 – 2015-02-11 15:02:46
那麼它不起作用。還有其他一些事情也應該是錯誤的。 FBO仍然從頂部切斷。我也使用glScissors,並在渲染之前將其設置爲glViewport。沒有不同。這裏還有什麼可能是錯的?我已經將OpenGL設置添加到第一篇文章。 – Przemek 2015-02-13 00:10:34