c++ - 如何在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;
}
我如何做同样的事情来传入和插值矩阵?想要这个用于法线贴图的切线矩阵和变换矩阵从高度图计算新的顶点法线。谢谢
解决方案
您不需要从标量构造向量来计算向量和标量的乘积。可以将向量乘以标量。如果向量乘以标量,则向量的每个分量都乘以标量。请注意,如果二元运算符(如, )的
两边都是向量(具有相同的大小),则该操作是按分量执行的。如果一侧是向量而另一侧是标量,则该操作将应用于向量的所有分量。
请参阅向量和矩阵运算。*
+
所以你的问题的表达可以写成:
return v0 * gl_TessCoord.x + v1 * gl_TessCoord.y + v2 * gl_TessCoord.z;
相同的规则适用于矩阵。甚至矩阵也可以乘以标量并按分量求和。如果m0
,m1
和m2
属于 类型mat3
,那么您可以执行以下操作:
mat3 m = m0 * gl_TessCoord.x + m1 * gl_TessCoord.y + m2 * gl_TessCoord.z;
推荐阅读
- cobol - 我如何让这个棒球项目运行起来?
- cmake - clang++ 编译一个可执行文件,但是 clang-check 找不到 std 头
- python - Scikit 值错误:预期的 2D 数组,得到 1D 数组
- css - 使父 Div 环绕动态绝对子 Div(选项卡 + 内容)
- reactjs - React SideBar 多级下拉递归
- html - 如何将按钮放在框的右下角
- javascript - 使用 Javascript 从其 URL 获取网站的正文
- javascript - 有没有办法准确知道队列中的最后一个任务何时开始在多线程应用程序中?
- javascript - 尝试将表单值发送到 Firebase 时无法读取未定义的属性“preventDefault”
- python - Selenium - Python 脚本可从 CLI 运行,但使用 cron 启动时出错