首页 > 解决方案 > 如何在opengl Tessalation评估着色器中插入矩阵

问题描述

在互联网上的任何地方都找不到这个。使用镶嵌评估着色器,我可以像这样插入 vec2 或 vec3 的值:

vec3 interpolate3D(vec3 v0, vec3 v1, vec3 v2)
{
return vec3(gl_TessCoord.x) * v0 + vec3(gl_TessCoord.y) * v1 +vec3(gl_TessCoord.z) * v2;
}

我如何做同样的事情来传入和插值矩阵?想要这个用于法线贴图的切线矩阵和变换矩阵从高度图计算新的顶点法线。谢谢

标签: c++openglglsl

解决方案


您不需要从标量构造向量来计算向量和标量的乘积。可以将向量乘以标量。如果向量乘以标量,则向量的每个分量都乘以标量。请注意,如果二元运算符(如, )的
两边都是向量(具有相同的大小),则该操作是按分量执行的。如果一侧是向量而另一侧是标量,则该操作将应用于向量的所有分量。 请参阅向量和矩阵运算*+

所以你的问题的表达可以写成:

return v0 * gl_TessCoord.x + v1 * gl_TessCoord.y + v2 * gl_TessCoord.z;

相同的规则适用于矩阵。甚至矩阵也可以乘以标量并按分量求和。如果m0,m1m2属于 类型mat3,那么您可以执行以下操作:

mat3 m = m0 * gl_TessCoord.x + m1 * gl_TessCoord.y + m2 * gl_TessCoord.z;

推荐阅读