android – 如何在opengl es 2中访问顶点着色器程序中的其他顶点?

android – 如何在opengl es 2中访问顶点着色器程序中的其他顶点?,第1张

概述我是一个 Android应用程序,我想在这个表面的其他顶点上计算表面depanding的法线.我不想在“主”程序中这样做,因为它花费了很多时间.实际上对于每个顶点,我为每个vextex传递4个浮点数组: attribute vec3 a_bottom;attribute vec3 a_left;attribute vec3 a_right;attribute vec3 a_top;vec 我是一个 Android应用程序,我想在这个表面的其他顶点上计算表面depanding的法线.我不想在“主”程序中这样做,因为它花费了很多时间.实际上对于每个顶点,我为每个vextex传递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这样的特殊关键字?还是有另一种可能性,我想念?

解决方法 这确实是不可能的.顶点着色器只能访问当前处理的顶点及其属性.由于OpenGL ES没有texture_buffer_object扩展,因此无法在着色器中访问VBO的数据.因此,访问顶点’邻居的唯一方法是将它们显式地放在顶点属性中,就像在第一个示例中一样.

但是,由于看起来您的几何图形是矩形图案,您也可以将其存储在纹理中(或将其复制到一个纹理,如果ES支持,则pixel_buffer_object扩展可能会有帮助).在这种情况下,您可以使用经典的GPGPU片段着色器,它根据的值计算输出图像的每个“像素”(在本例中为顶点)的法线(在本例中为矩形几何体的法线数据).它的邻居(通过简单的纹理访问访问).

但是我想,考虑到额外的编程开销和/或内存复制 *** 作,第一个和第二个都不会真的由你做任何事情,因为计算顶点法线已经非常快了.你无论如何都不必每次都这样做,如果你真的这样做,那是因为你也在更新你的顶点位置,在这种情况下你可以使用相同的更新例程来处理普通数据(无论是cpu还是cpu) GPGPU).

总结

以上是内存溢出为你收集整理的android – 如何在opengl es 2中访问顶点着色器程序中的其他顶点?全部内容,希望文章能够帮你解决android – 如何在opengl es 2中访问顶点着色器程序中的其他顶点?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存