Ski*_*des 14 opengl performance shader vector glsl
我已经阅读了一些关于GLSL的教程.在某些位置属性是某些vec3中的vec4.我知道矩阵运算需要一个vec4,但是值得发送一个额外的元素吗?发送vec3并稍后在着色器vec4(位置,1.0)中投射是不是更好?内存中的数据越少 - 速度越快?或者我们应该包装一个额外的元素,以避免铸造?
什么提示应该更好?
layout(location = 0) in vec4 position;
MVP*position;
Run Code Online (Sandbox Code Playgroud)
要么
layout(location = 0) in vec3 position;
MVP*vec4(position,1.0);
Run Code Online (Sandbox Code Playgroud)
And*_*man 26
对于顶点属性,这无关紧要.第四个组件会1.0在不存在时自动扩展.
也就是说,如果你通过一个3维顶点属性指向一个4维向量,GL将填充在W与1.0你.我总是采用这种方法,避免vec4 (...)在对位置进行矩阵乘法时必须明确写入,并且还避免浪费存储第4个组件的内存.
顺便说一下,这也适用于2D坐标.传递给vec4属性的2D坐标变为vec4 (x, y, 0.0, 1.0).一般规则是:所有缺少的组件都被替换为0.0除了W,替换为1.0.
但是,对于那些在这种情况下不了解GLSL行为的人来说,这可能会令人困惑.我想这就是大多数教程从未触及过这个主题的原因.
| 归档时间: |
|
| 查看次数: |
7365 次 |
| 最近记录: |