2014-08-30 37 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; 
} 

這個shader確實在屏幕上畫點什麼:

#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 2014-08-31 13:08:10

+0

感謝您的輸入,我會盡我所能將我的問題更新爲zoon。 – Blight 2014-08-31 15:18:13

+0

@gouessej我已更新我的問題 – Blight 2014-08-31 21:52:42

回答

0

我感覺很愚蠢,主要問題是MVP在着色器中被稱爲MPV!感謝gouessej幫助。

+0

我沒有看到拼寫錯誤:對不起。 – gouessej 2014-09-02 11:53:35