Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Opengl 给定模型/视图/投影变换矩阵,如何在不使用GLSL 1.2中不推荐的功能的情况下计算法线矩阵?_Opengl_Glsl_Vertex Shader - Fatal编程技术网

Opengl 给定模型/视图/投影变换矩阵,如何在不使用GLSL 1.2中不推荐的功能的情况下计算法线矩阵?

Opengl 给定模型/视图/投影变换矩阵,如何在不使用GLSL 1.2中不推荐的功能的情况下计算法线矩阵?,opengl,glsl,vertex-shader,Opengl,Glsl,Vertex Shader,我知道法线变换矩阵是模型/视图/投影矩阵转置的逆矩阵,但它看起来像是仅在GLSL 1.4中添加了“”,我找不到“转置”。我需要把一堆数学知识复制粘贴到我的GLSL中吗?(如果是这样的话,有没有一个好的权威开源网站可以让我复制?) 明确地说,我要问的是“如何在不使用不推荐的API的情况下计算gl\u NormalMatrix”这通常通过计算modelview矩阵的逆矩阵的转置来处理 N = (M^-1)^T 在CPU上,然后像上载任何其他矩阵一样上载矩阵。只是为了澄清,还有一个矩阵,如果不进行任

我知道法线变换矩阵是模型/视图/投影矩阵转置的逆矩阵,但它看起来像是仅在GLSL 1.4中添加了“”,我找不到“
转置
”。我需要把一堆数学知识复制粘贴到我的GLSL中吗?(如果是这样的话,有没有一个好的权威开源网站可以让我复制?)


明确地说,我要问的是“如何在不使用不推荐的API的情况下计算
gl\u NormalMatrix

这通常通过计算modelview矩阵的逆矩阵的转置来处理

N = (M^-1)^T

在CPU上,然后像上载任何其他矩阵一样上载矩阵。

只是为了澄清,还有一个矩阵,如果不进行任何缩放,则正常矩阵是3x3子矩阵,在glsl中可以执行

normal = mat3(model_matrix) * v_normal;

顺便说一句,如果您仅限于GL 2.1,那么避免使用“不推荐的API”就没有太多意义。如果您坚持使用在核心配置文件上工作的东西,是否更容易将端口转发到OpenGL和OpenGL ES的新版本?是的,这就是我最后要做的。具体地说,我最终在Python中使用NumPy实现了这一点,它是
转置(M[:3,:3])。I
,但我怀疑在C中实现这一点有点困难。这应该避免,因为它不能处理所有情况。虽然您确实明确提到了这个限制,但随着程序不断修改,这不太可能是一个现实的期望。。。突然,有人缩放了某个东西,并会在缩放代码中寻找问题,而事实上,它并不存在。。。由于GPU中没有用于着色器的分步调试器,这只是自找麻烦。