2014-08-30 2 views
-1

JOGL을 사용하여 간단한 와이어 프레임 큐브를 렌더링하려고합니다.내 코드가 검은 색 화면을 렌더링합니다.

그러나 검은 화면이 표시됩니다. 내가 잘못한 것보다 더 많은 경험을 가진 사람이 누구인지 알 수 있습니까?

쉐이더가 컴파일되고 오류가 발생하지 않습니다.

private Mat4 projectionMatrix; 
//reference to the uniform MPV matrix in the vertex shader 
private int mpvUnif; 

//Holds the references to GL objects 
private final int[] glPointers = new int[3]; 
private static final int VBO = 0; 
private static final int INDEXBUFFER = 1; 
private static final int VAO = 2; 

private int shaderProgram; 

private FloatBuffer vertexDataBuffer; 
private ShortBuffer indexDataBuffer; 

private float[] testCube = new float[] { 
     //Top 
     -1, 1, 1, //0 
     1, 1, 1, //1 
     -1, -1, 1, //2 
     1, -1, 1, //3 
     //Bottom  
     -1, 1, -1, //4 
     1, 1, -1, //5 
     -1, -1, -1, //6 
     1, -1, -1, //7 
}; 

private short[] testCubeIndexes = new short[] { 
     0,1,2,3, 
     4,5,6,7, 
     0,1,4,5, 
     2,3,6,7, 
     0,2,4,6, 
     1,3,5,7 
}; 

public GLController() { 
    this.vertexDataBuffer = FloatBuffer.wrap(testCube); 
    this.indexDataBuffer = ShortBuffer.wrap(testCubeIndexes); 
} 

@Override 
public void init(GLAutoDrawable drawable) { 
    GL3 gl = drawable.getGL().getGL3(); 
    shaderProgram = gl.glCreateProgram(); 
    try { 
     InitializeVertexBuffer(gl); 
     InitializeVertexArrayObjects(gl); 
     initShaders(gl); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    gl.glPolygonMode(GL3.GL_FRONT_AND_BACK, GL3.GL_LINE); 
    gl.glFrontFace(GL3.GL_CW); 
} 

@Override 
public void display(GLAutoDrawable drawable) { 
    GL3 gl = drawable.getGL().getGL3(); 

    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    gl.glClear(GL3.GL_COLOR_BUFFER_BIT); 

    gl.glUseProgram(shaderProgram); 

    gl.glBindVertexArray(glPointers[VAO]); 
    gl.glDrawElements(GL3.GL_QUADS, indexDataBuffer.capacity(), GL3.GL_UNSIGNED_SHORT, 0); 

    gl.glBindVertexArray(0); 
    gl.glUseProgram(0); 
} 

@Override 
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { 
    GL3 gl = drawable.getGL().getGL3(); 

    mpvUnif = gl.glGetUniformLocation(shaderProgram, "MPV"); 
    projectionMatrix = Matrices.perspective(60f, width/height, .1f, 100f); 

    gl.glUseProgram(shaderProgram); 
    gl.glUniformMatrix4fv(mpvUnif, 1, GLHelper.glBool(GL3.GL_FALSE), projectionMatrix.getBuffer()); 
    gl.glUseProgram(0); 
} 

/** 
* Called in GLEventListener.init() 
* @param gl 
*/ 
private void InitializeVertexBuffer(GL3 gl) { 
    gl.glGenBuffers(1, glPointers, VBO); 
    gl.glBindBuffer(GL3.GL_ARRAY_BUFFER, glPointers[VBO]); 
    gl.glBufferData(GL3.GL_ARRAY_BUFFER, GLHelper.sizeof(vertexDataBuffer), vertexDataBuffer, GL3.GL_STATIC_DRAW); 
    gl.glBindBuffer(GL3.GL_ARRAY_BUFFER, 0); 

    gl.glGenBuffers(1, glPointers, INDEXBUFFER); 
    gl.glBindBuffer(GL3.GL_ELEMENT_ARRAY_BUFFER, glPointers[INDEXBUFFER]); 
    gl.glBufferData(GL3.GL_ELEMENT_ARRAY_BUFFER, GLHelper.sizeof(indexDataBuffer), indexDataBuffer, GL3.GL_STATIC_DRAW); 
    gl.glBindBuffer(GL3.GL_ELEMENT_ARRAY_BUFFER, 0); 
} 

/** 
* Called in GLEventListener.init() 
* @param gl 
*/ 
private void InitializeVertexArrayObjects(GL3 gl) { 
    gl.glGenVertexArrays(1, glPointers, VAO); 
    gl.glBindVertexArray(glPointers[VAO]); 

    gl.glBindBuffer(GL3.GL_ARRAY_BUFFER, glPointers[VBO]); 
    gl.glEnableVertexAttribArray(0); 
    gl.glVertexAttribPointer(0, 3, GL3.GL_FLOAT, GLHelper.glBool(GL3.GL_FALSE), 0, 0); 
    gl.glBindBuffer(GL3.GL_ELEMENT_ARRAY_BUFFER, glPointers[INDEXBUFFER]); 

    gl.glBindVertexArray(0); 
} 

내 버텍스 쉐이더 :

#version 330 

layout(location = 0) in vec3 vertexPosition_modelspace; 

uniform mat4 MVP; 

void main() 
{ 
    vec4 v = vec4(vertexPosition_modelspace, 1); 
    gl_Position = MVP * v; 
} 

이 쉐이더는 화면에 뭔가를 그릴 수행합니다

#version 330 

layout(location = 0) in vec3 vertexPosition_modelspace; 

uniform mat4 MVP;//not used 

void main() 
{ 
    gl_Position = vec4(vertexPosition_modelspace, 1); 
} 

내 조각 쉐이더 :

#version 330 

out vec4 outputColor; 

void main() 
{ 
    outputColor = vec4(1.0, 1.0, 1.0, 1.0); 
} 
+0

sscce : http://sscce.org를 게시하십시오. 또한 JOGL 자체가 비난하지 않기 때문에 질문의 제목을 좋아하지 않습니다. 문제는 아마도 자신의 코드에서 나옵니다. 테스트 사례를 코드 예제와 BSP 파일 예제로 제공하십시오. 어쩌면 당신의 절두체가 잘못되었을 수도 있습니다. – gouessej

+0

입력 해 주셔서 고맙습니다. 가능한 한 빨리 내 질문을 업데이트하겠습니다. – Blight

+0

@gouessej 내 질문을 업데이트했습니다. – Blight

답변

0

내가 너무 기분 바보, 주요 문제는 MVP 셰이더에서 MPV로 참조되었습니다! 도와 주신 gouessej에게 감사드립니다.

+0

철자 오류가 표시되지 않았습니다. 죄송합니다. – gouessej

관련 문제