2014-12-10 2 views
0

내 문제는 프레임 버퍼 객체에 작은 쿼드를 그려서 윈도우의 프레임 버퍼에 그려 넣으려고한다는 것입니다. 이것은 내 자바 코드입니다 :FrameBufferObject에 그릴 수없고 LWJGL의 frameBuffer에 그릴 수 없습니다.

import static org.lwjgl.opengl.GL30.*; 
import static org.lwjgl.opengl.GL11.*; 
import java.nio.ByteBuffer; 
import org.lwjgl.opengl.*; 

public class Main 
{ 
    private static int fboID; 
    private static int texID; 
    private static int depthBuff; 

    public static void main(String[] args) 
    { 
     try 
     { 
      Display.setDisplayMode(new DisplayMode(640, 480)); 
      Display.create(); 
     } catch (Exception e) 
     { 
      e.printStackTrace(); 
      System.exit(1); 
     } 

     glEnable(GL_TEXTURE_2D); 
     initFramebuffer(); 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glOrtho(0, 640, 480, 0, 1, -1); 
     glMatrixMode(GL_MODELVIEW); 

     while (!Display.isCloseRequested()) 
     { 
      glBindTexture(GL_TEXTURE_2D, texID); 
      glBegin(GL_QUADS); 

      glTexCoord2f(0, 0); 
      glVertex2i(10, 10); 

      glTexCoord2f(0, 1); 
      glVertex2i(10, 470); 

      glTexCoord2f(1, 1); 
      glVertex2i(630, 470); 

      glTexCoord2f(1, 0); 
      glVertex2i(630, 10); 

      glEnd(); 
      glBindTexture(GL_TEXTURE_2D, 0); 

      Display.update(); 
      Display.sync(60); 
     } 
    } 

    public static void initFramebuffer() 
    { 
     fboID = glGenFramebuffers(); 
     glBindFramebuffer(GL_FRAMEBUFFER, fboID); 

     texID = glGenTextures(); 
     glBindTexture(GL_TEXTURE_2D, texID); 
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 640, 480, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer) null); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

     depthBuff = glGenRenderbuffers(); 
     glBindRenderbuffer(GL_RENDERBUFFER, depthBuff); 
     glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, 640, 480); 
     glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuff); 

     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texID, 0); 

     if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) 
      System.out.println("GOD DAMT"); 

     glBindFramebuffer(GL_FRAMEBUFFER, fboID); 
     { 
      glMatrixMode(GL_PROJECTION); 
      glLoadIdentity(); 
      glOrtho(0, 640, 480, 0, 1, -1); 
      glMatrixMode(GL_MODELVIEW); 

      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
      glViewport(0, 0, 640, 480); 

      //glLoadIdentity(); 

      glBegin(GL_QUADS); 
      glColor3f(1, 0, 0); 
      glVertex2i(0, 0); 
      glVertex2i(100, 0); 
      glVertex2i(100, 100); 
      glVertex2i(0, 100); 
      glEnd(); 
     } 
     glBindFramebuffer(GL_FRAMEBUFFER, 0); 

    } 
} 

나는이 코드를 실행할 때마다 검은 색 화면 만 남습니다. 내가 뭘 잘못하고 있니? 내가 OpenGL을 함께 tooooo 익숙하지 않다

+0

너 뭐야? 당신의 문제는 정확히 무엇입니까? 당신은 "작은 쿼드를 그렸습니다."하지만 당신은 "할 수없는"프레임 버퍼에 그것을 그려 넣으려고합니다. 오류가 있습니까? 구체적으로 말씀해 주시겠습니까? –

+0

아니 그냥 검은 화면입니다 – user3001431

답변

2

하지만

대신

glEnable(GL_TEXTURE_2D); 
    initFramebuffer(); 

당신이 초기화 FB 후 사용할 텍스처를 설정해야합니다에 보이는이이 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);에 의해 발생

initFramebuffer(); 
    glEnable(GL_TEXTURE_2D); 

빈 화면이 나타나는 fb 텍스처 상자 앞에 초기화되지 않은 (비 -fb 텍스처) 렌더링

+0

soooo 많이 고마워요 : D 조 : D – user3001431

+0

당신은 환영하지만, 좀 봐주세요 http://stackoverflow.com/help/mcve –

관련 문제