【发布时间】:2016-12-07 13:55:07
【问题描述】:
我一直在使用 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是否小于零?