我一直在使用JOGL拼湊一個基本的遊戲引擎,當它涉及到訪問和/或在我的shader代碼更新uniform變量都創下了相當大的道路凹凸顯示黑屏。統一變量使用JOGL
這裏是我很分配表和相關緩衝區:
protected float[] test_matrix = {
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
protected int matrix_size = test_matrix.length;
FloatBuffer matrix_buffer = Buffers.newDirectFloatBuffer(test_matrix, 0, matrix_size);
這裏是有問題的代碼:
shaderProgram = gl.glCreateProgram();
gl.glAttachShader(shaderProgram, vertShader);
gl.glAttachShader(shaderProgram, fragShader);
pmvmatrix = new PMVMatrix();
transmatrix_location = gl.glGetUniformLocation(shaderProgram, "transformationMatrix");
gl.glUniformMatrix4fv(transmatrix_location, 400, false, matrix_buffer);
pmvmatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
pmvmatrix.glLoadIdentity();
gl.glBindAttribLocation(shaderProgram, 0, "position");
gl.glBindAttribLocation(shaderProgram, 1, "color");
gl.glLinkProgram(shaderProgram);
,這裏是我的頂點着色器:
#version 400 core
in vec3 position;
out vec3 color;
uniform mat4 transformationMatrix;
void main(void){
gl_Position = transformationMatrix * vec4(position,1.0);
color = vec3(position.x+0.5,1.0,position.y+0.5);
}
着色器編譯成功,如果我刪除頂點着色器中的「transformationMatrix *」,則對象正確渲染。
是我的矩陣只是被作爲一個1X16矩陣,而不是一個4X4通過呢?我是否正確使用glUniformMatrix4fv函數?
是'transmatrix_location'小於零? – genpfault