Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 统一的highp mat4未填充值_Ios_Opengl Es_Glsl - Fatal编程技术网

Ios 统一的highp mat4未填充值

Ios 统一的highp mat4未填充值,ios,opengl-es,glsl,Ios,Opengl Es,Glsl,我正在将视图投影矩阵传递到我的OpenGLSL 2.0着色器中 在我的片段着色器中,相应的矩阵实际上被设置为没有值。我已经检查过了,检查过了,程序和制服是否连接在一起,设置是否恰当——没有问题 我错过了什么 Obj-C代码: //Calculates the required matrices GLKMatrix4 cameraViewProjectionMatrix = GLKMatrix4Multiply(self->_projectionMatrix_CameraView,

我正在将视图投影矩阵传递到我的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]));
}
片段着色器代码:

//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]));
}
任何帮助都将不胜感激


我要做的就是将屏幕坐标转换为世界坐标,并使用这些值来处理阴影贴图…

考虑到故障排除所花费的时间,输入错误的比例非常愚蠢:

错误: glUniformMatrix3fv

修复:
glUniformMatrix4fv

在设置制服之前,您是否调用了
glUseProgram
?是的,我完全能够在屏幕上渲染任何其他内容。即使设置gl_FragCoord=vec4(1.0,abs(worldToShadowMapMatrix[0][0]),0.0,1.0)也会产生红色输出。此代码来自作为最终过程的合成着色器。我对其他纹理缓冲区的输入也能很好地工作,当我通过它们的纹理值时,我可以通过该着色器显示它们。一切似乎都设置正确。。。它只是没有收到这些矩阵的值…?我也成功地通过了我所有的其他制服。