【问题标题】:OpenGL application, The Black Screen of FaliureOpenGL 应用程序,失败的黑屏
【发布时间】:2014-03-23 14:52:50
【问题描述】:

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

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

当我使用结合视图/相机矩阵的投影时,我总是(即使向各个方向移动)得到一个空白屏幕,或者我喜欢称之为:“失败的黑屏”。

这是我传递给 VS 的矩阵:

模型 Mat4:(模型在 x 轴上旋转)

1.0 0.0 0.0 0.0 
0.0 0.4888726 0.8723553 0.0 
0.0 -0.8723553 0.4888726 0.0 
0.0 0.0 0.0 1.0 

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

0.94107544 0.0 0.33819667 -0.53266037 
0.0 1.0 0.0 0.0 
-0.33819667 0.0 0.94107544 2.4321942 
0.0 0.0 0.0 1.0 

投影 Mat4:

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;     
}

【问题讨论】:

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

标签: java opengl matrix glsl lwjgl


【解决方案1】:

事实证明,有时布尔值会严重影响您。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多