Java OpenGL应用程序,Faliure的黑屏
没有透视投影和视图矩阵,我的场景很好: 如果我使用相机,结果会很奇怪: 当我将投影与视图/相机矩阵结合使用时,我总是(即使在每个方向上移动)得到一个空屏幕,或者我喜欢称之为“Faliure的黑屏” 以下是我传递给VS的矩阵: 模型Mat4:(模型在x轴上旋转) 视图Mat4:(相机在y轴上轻微移动和旋转) 投影图4: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
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