我将视图投影矩阵传递给我的OpenGLSL 2.0着色器。
在我的片段着色器中,相应的矩阵实际上没有设置值。我检查过并检查过程序和制服是否正确连接和设置 - 没有问题。
我缺少什么?
Obj-C代码:
//Calculates the required matrices
GLKMatrix4 cameraViewProjectionMatrix = GLKMatrix4Multiply(self->_projectionMatrix_CameraView, self->_cameraViewMatrix);
GLKMatrix4 iCameraViewProjectionMatrix = GLKMatrix4Invert(cameraViewProjectionMatrix, NULL);
GLKMatrix4 lightSourceCameraViewProjectionMatrix = GLKMatrix4Multiply(self->_projectionMatrix_LightSource, self->_lightSourceCameraViewMatrix);
GLKMatrix4 shadowMapBiasMatrix = GLKMatrix4Make(0.5f, 0.0f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f, 0.0f,
0.0f, 0.0f, 0.5f, 0.0f,
0.5f, 0.5f, 0.5f, 1.0f);
GLKMatrix4 cameraViewProjectionToShadowMapMatrix = GLKMatrix4Multiply(shadowMapBiasMatrix, lightSourceCameraViewProjectionMatrix);
//This confirms the values are bound and exist in the matrices
NSLog(@"UNIFORM_I_CAMERAVIEW_PROJECTION_MATRIX: %d", compositeSceneTexturesShaderUniforms[UNIFORM_I_CAMERAVIEW_PROJECTION_MATRIX]);
NSLog(@"UNIFORM_WORLD_TO_SHADOW_MAP_MATRIX: %d", compositeSceneTexturesShaderUniforms[UNIFORM_WORLD_TO_SHADOW_MAP_MATRIX]);
NSLog(@"\n[%f, %f, %f, %f],\n[%f, %f, %f, %f],\n[%f, %f, %f, %f],\n[%f, %f, %f, %f]",
iCameraViewProjectionMatrix.m00, iCameraViewProjectionMatrix.m01, iCameraViewProjectionMatrix.m02, iCameraViewProjectionMatrix.m03,
iCameraViewProjectionMatrix.m10, iCameraViewProjectionMatrix.m11, iCameraViewProjectionMatrix.m02, iCameraViewProjectionMatrix.m13,
iCameraViewProjectionMatrix.m20, iCameraViewProjectionMatrix.m21, iCameraViewProjectionMatrix.m02, iCameraViewProjectionMatrix.m23,
iCameraViewProjectionMatrix.m30, iCameraViewProjectionMatrix.m31, iCameraViewProjectionMatrix.m02, iCameraViewProjectionMatrix.m33);
NSLog(@"\n[%f, %f, %f, %f],\n[%f, %f, %f, %f],\n[%f, %f, %f, %f],\n[%f, %f, %f, %f]",
cameraViewProjectionToShadowMapMatrix.m00, cameraViewProjectionToShadowMapMatrix.m01, cameraViewProjectionToShadowMapMatrix.m02, cameraViewProjectionToShadowMapMatrix.m03,
cameraViewProjectionToShadowMapMatrix.m10, cameraViewProjectionToShadowMapMatrix.m11, cameraViewProjectionToShadowMapMatrix.m02, cameraViewProjectionToShadowMapMatrix.m13,
cameraViewProjectionToShadowMapMatrix.m20, cameraViewProjectionToShadowMapMatrix.m21, cameraViewProjectionToShadowMapMatrix.m02, cameraViewProjectionToShadowMapMatrix.m23,
cameraViewProjectionToShadowMapMatrix.m30, cameraViewProjectionToShadowMapMatrix.m31, cameraViewProjectionToShadowMapMatrix.m02, cameraViewProjectionToShadowMapMatrix.m33);
//Binds the matrices
glUniformMatrix3fv(compositeSceneTexturesShaderUniforms[UNIFORM_I_CAMERAVIEW_PROJECTION_MATRIX], 1, 0, iCameraViewProjectionMatrix.m);
glUniformMatrix3fv(compositeSceneTexturesShaderUniforms[UNIFORM_WORLD_TO_SHADOW_MAP_MATRIX], 1, 0, cameraViewProjectionToShadowMapMatrix.m);
片段着色器代码:
uniform highp mat4 iCameraViewProjectionMatrix;
uniform highp mat4 worldToShadowMapMatrix;
void main(void){
//There is real code, but I am just testing if values are being passed in
//because everything else works until I attempt to transform using these
//matrices and they just output ZEROS!!!
gl_FragColor = vec4(abs(worldToShadowMapMatrix[0][0]));
}
任何帮助都将不胜感激。
我想做的就是将屏幕坐标转换为世界坐标并使用这些值来混淆阴影贴图...
答案 0 :(得分:0)
考虑到故障排除所花费的时间,错误比例的错字:
<强>错误:强> glUniformMatrix3fv
<强>修正:强> glUniformMatrix4fv