我是一款安卓应用程序,我想根据该表面的其他顶点计算其法线。我不希望在“主”程序中执行此操作,因为这需要太长时间。实际上,对于每个顶点,我传递了4个浮点数组:
attribute vec3 a_bottom;
attribute vec3 a_left;
attribute vec3 a_right;
attribute vec3 a_top;
vec3 calculNormal( ) {
return normalize( cross( (a_left - a_right) , ( a_bottom - a_top ) ) );
}
我知道这是非常非常非常糟糕的代码,所以我不想传递4个数组,我想这样做:
vec3 calculNormal( ) {
vec3 a_left = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - 1 ];
vec3 a_bottom = CURRENT_FLOATBUFFER[ CURRENT_FLOAT_BUFFER_POSITION - X ];
...
return normalize( cross( (a_left - a_right) , ( a_bottom - a_top ) ) );
}
在顶点着色器程序中,能否访问当前的浮点缓冲区?是否有类似于currentFloat的特殊关键字?还是我错过了其他可能性?
textureGather
(GLSL-4及更高版本),可以获取2×2个纹素的网格,这正是您所需要的。然而,我仍然建议预先计算法线,这为您提供了实际上是纹理的法线贴图。 - datenwolf