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这样的特殊关键字?还是有另一种可能性,我想念?
解决方法 这确实是不可能的.顶点着色器只能访问当前处理的顶点及其属性.由于OpenGL ES没有texture_buffer_object扩展,因此无法在着色器中访问VBO的数据.因此,访问顶点’邻居的唯一方法是将它们显式地放在顶点属性中,就像在第一个示例中一样.但是,由于看起来您的几何图形是矩形图案,您也可以将其存储在纹理中(或将其复制到一个纹理,如果ES支持,则pixel_buffer_object扩展可能会有帮助).在这种情况下,您可以使用经典的GPGPU片段着色器,它根据的值计算输出图像的每个“像素”(在本例中为顶点)的法线(在本例中为矩形几何体的法线数据).它的邻居(通过简单的纹理访问访问).
但是我想,考虑到额外的编程开销和/或内存复制 *** 作,第一个和第二个都不会真的由你做任何事情,因为计算顶点法线已经非常快了.你无论如何都不必每次都这样做,如果你真的这样做,那是因为你也在更新你的顶点位置,在这种情况下你可以使用相同的更新例程来处理普通数据(无论是cpu还是cpu) GPGPU).
总结以上是内存溢出为你收集整理的android – 如何在opengl es 2中访问顶点着色器程序中的其他顶点?全部内容,希望文章能够帮你解决android – 如何在opengl es 2中访问顶点着色器程序中的其他顶点?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)