GLSL 330 矩阵计算错误无编译错误

Posted

技术标签:

【中文标题】GLSL 330 矩阵计算错误无编译错误【英文标题】:GLSL 330 Matrix-Computation Error No compile errorGLSL 330 矩阵计算错误无编译错误 【发布时间】:2013-01-03 17:49:23 【问题描述】:

编辑: 好的,现在知道了:D 问题:完全忘记了 glm 使用列主矩阵。只需将 GL_TRUE 更改为 GL_FALSE,一切正常。


我尝试用我的 ProjectionMatrix 计算我的 ModelMatrix。像这样:

#version 330

layout(location = 0) in vec4 position;
layout(location = 1) in vec4 color;


uniform mat4 projectionMatrix;   //This are the Matrixes from my cpp-app
uniform mat4 modelMatrix;        //With a debugger that can show all active uniforms i checked their values: They're right!

uniform mat4 testUni;            //Here I checked if its working when I precompute the model and perspective matrices in my source: works
mat4 viewMatrix = mat4(1.0f);

noperspective out vec4 vertColor;


mat4 MVP = projectionMatrix * modelMatrix ; //Should actually have the same value like testUni

void main() 



gl_Position = testUni * position ;    //Well... :) Works
gl_Position = MVP * position ;    //Well... :) Doesn't work [Just the perspective Transforn]


vertColor = position;

【问题讨论】:

将 MVP 计算移入 main() 时会发生什么?还是做MVPconst const MVP:白色矩形:在 main() 中不起作用:与上面的 main() 相同[但没有 const] 【参考方案1】:

移动语句

mat4 MVP = projectionMatrix * modelMatrix ; //Should actually have the same value like testUni

进入main()。着色器执行从 main 开始。如果您想避免按顶点计算,请在外部预先计算矩阵并将其作为统一矩阵提供。

【讨论】:

Edited main post^^ 但实际上结果是一样的。而且我真的不喜欢这种预先计算,在我的情况下,我必须在每次抽奖后进行额外的调用-.- @user1946282:使用预计算,它是 CPU 端的一个调用,而 GPU 上可能有数千个冗余计算。如果只有一个矩阵,CPU 的性能将大大优于 GPU。 是的,如果这是我唯一的可能性,我会在 cpu 上预先计算它。但我反对它的主要原因是我有 2 个用于这些矩阵的类。而且我不知道如何将投影矩阵的值放入处理模型矩阵的矩阵中:/ @user1946282:您只需将它们相乘即可。如果您的矩阵类不支持矩阵乘法,它们就会损坏。能够进行矩阵乘法对于与计算机图形相关的任何事情都是必不可少的。 嗯你误会了我,我不知道如何将矩阵从其他类中获取到我最终将计算它的类中:)

以上是关于GLSL 330 矩阵计算错误无编译错误的主要内容,如果未能解决你的问题,请参考以下文章

Opengl 3.3 不绘制任何东西。使用 GLSL 330 核心

如何获取GLSL编译器错误的行号

超过一个字符指针时的GLSL编译错误(glShaderSource)

错误 GLSL 版本不正确 450

GLSL 错误:无法预处理源。我该如何解决这个问题?

读取文件,数据损坏