Java OpenGL应用程序,Faliure的黑屏

Java OpenGL应用程序,Faliure的黑屏,java,opengl,matrix,glsl,lwjgl,Java,Opengl,Matrix,Glsl,Lwjgl,没有透视投影和视图矩阵,我的场景很好: 如果我使用相机,结果会很奇怪: 当我将投影与视图/相机矩阵结合使用时,我总是(即使在每个方向上移动)得到一个空屏幕,或者我喜欢称之为“Faliure的黑屏” 以下是我传递给VS的矩阵: 模型Mat4:(模型在x轴上旋转) 视图Mat4:(相机在y轴上轻微移动和旋转) 投影图4: 1.299038 0.0 0.0 0.0 0.0 1.7320509 0.0 0.0 0.0 0.0 1.002002 -2.002002 0.0 0.0 1.0 0.0

没有透视投影和视图矩阵,我的场景很好:

如果我使用相机,结果会很奇怪:

当我将投影与视图/相机矩阵结合使用时,我总是(即使在每个方向上移动)得到一个空屏幕,或者我喜欢称之为“Faliure的黑屏”

以下是我传递给VS的矩阵: 模型Mat4:(模型在x轴上旋转)

视图Mat4:(相机在y轴上轻微移动和旋转)

投影图4:

1.299038 0.0 0.0 0.0 
0.0 1.7320509 0.0 0.0 
0.0 0.0 1.002002 -2.002002 
0.0 0.0 1.0 0.0 
透视项目计算:

thf=tan(torad(60)/2); ar=800/600; zn=1; zf=1000;

1/(thf*ar) 0 0 0
0 1/thf 0 0 
0 0 (-zn-zf)/(zn-zf) 2*zn*zf/(zn-zf) 
0 0 1 0
  
我的顶点着色器:

#version 330

attribute layout(location = 0) vec3 Position;
attribute layout(location = 1) vec3 TexCoord;
attribute layout(location = 2) vec3 Normal;
out vec3 TexCoords;
uniform mat4 Model;
uniform mat4 View;
uniform mat4 Projection;

void main(){
        
    gl_Position = Projection * View * Model * vec4(Position, 1);
    TexCoords=TexCoord;     
}

事实证明,有时候一个布尔值会把你搞得一团糟

 glUniformMatrix4(UniformHandle, true, ubo); // true for row-major order

在测试编译成功时,大多数框架都会给出可以理解的编译失败。通过你的片段着色器,顶点看起来也很正常…真的是3d中的TexCoord,不是vec2吗?该程序已成功编译并链接。目前我使用2D tex坐标,但最终目标实际上是将我的应用程序扩展到3d贴图纹理。你是否有机会缩放投影矩阵?投影矩阵应该是正交的。你的投影矩阵看起来很奇怪。特别是第二行和第三行似乎有5列。同样,第三列缺少值。@CommuSoft我已经检查过,但没有缩放投影矩阵,该矩阵是我在下面发布的计算结果。
#version 330

attribute layout(location = 0) vec3 Position;
attribute layout(location = 1) vec3 TexCoord;
attribute layout(location = 2) vec3 Normal;
out vec3 TexCoords;
uniform mat4 Model;
uniform mat4 View;
uniform mat4 Projection;

void main(){
        
    gl_Position = Projection * View * Model * vec4(Position, 1);
    TexCoords=TexCoord;     
}
 glUniformMatrix4(UniformHandle, true, ubo); // true for row-major order