1. 首页
  2. three.js

three.js置换后,在顶点着色器中计算索引几何体的顶点法线

这件事我已经忙了一段时间了。我有一个用于GPGPU布料物理模拟的索引PlaneBuffer几何体,在将模拟渲染到纹理后,我无法在最终顶点着色器中正确计算法线。n这是我当前的设置(包括相关部分),我认为它不起作用,因为我需要知道顺序的方法当前顶点及其“面”中的相邻顶点。只是不能完全正确地理解它。njavascript:n//get+=3){推([index[i+0]*3,index[i+1]*3,index[i+2]*=顶点[index*3+2];dataTexturePixels[index*4+=(index%大小)/size;positionReference[index*3+>n这是我的大脑出问题的地方。我曾尝试以各种方式使用faces数组中的face索引值,但由于索引是重复的,数据被覆盖。无法考虑如何正确存储每个面的顶点索引信息,以便可以使用positionReference(或其他方式)在顶点着色器中查找它。n顶点着色器/模拟运行后:n//如果可以获得正确的有序=texture2D(tPositions,=pos1-pos2;vec3>n片段着色器>n不确定我是否遗漏了一些明显的东西/做了一些愚蠢的事情,或者这个问题确实很难解决。没有张贴我尝试过的许多失败的方法,有人有什么想法吗?n非常感谢您的帮助。n编辑:我添加了两个示例,这个示例12使用平面着色处理面法线,这个示例10显示了我当前混乱的平滑顶点法线进度。很难找到我的错误…n嗨,mystaticself,n事实上,您正在模拟一个复杂的案例场景。我认为最好的方法是使用最新/最接近的结果设置一个JSFIDLE,这样我们就可以有一个基础来工作,并有一张通过计算法线来实现的图片。n需要清除的是您要计算的法线(面、顶点)?我假设它是面法线,您>无法考虑如何正确存储顶点索引信息n[/quote]n是的,您必须将顶点索引传递给着色器才能计算面法线(如果这是您试图实现的)。正如您可能已经知道的,顶点着色器在每个顶点上工作(并行),并且不保存有关其关系的任何信息。不需要提取uv坐标即可获得法线,索引应该足够了。n不使用uv坐标有一个特殊的原因THREE.js内置法线,是否需要重新计算?n大家好,n今天晚些时候我会尝试修改一下,我的构建工具的设置非常复杂,但我会看看是否可以移植它。n我正在尝试计算顶点法线以实现平滑着色。我的uv坐标评论有点误导(我更新了一点),我只是想使用位置参考.xy(was uvReference)纹理坐标,以查找相邻顶点及其在当前面内的顺序。只是不知道如何存储这些信息,以便轻松查找每个顶点。n在设置顶点位置动画后,内置法线不正确,因此需要重新计算它们。在我写这篇文章时,我认为我的照明计算可能(也)有问题。n我已经用我的照明示例更新了原始问题,如果有什么问题,请告诉我。n再次感谢。nRe@mystaticself,n我知道在模型4的片段着色器中有一种方法可以做到这一点,但是我不知道webGL 1.0中有这样的功能。n使用uv贴图的技巧可能有效,您必须尝试一个简单的案例场景,看看它是否有效。您可以使用firefox dev中的buildin着色器调试器来破解这个问题。n为什么不在CPU端计算顶点法线并将信息传递给着色器?nPS:有关该主题的更多详细信息,请参阅本文:https://gamedev.stackexchange.com/questions/75313/computing-per-vertex-normal-in-geometry-shader42n我不希望在CPU上执行此操作,因为我没有使用bufferGeometry的位置属性,而是将位置渲染到数据纹理。我还没有试过,但我假设在每个像素/位置循环,并在CPU上重新计算每个帧的法线会非常昂贵。这也必须在移动设备上运行。但是值得进行性能测试。n编辑:甚至不可能从基于数组的数据纹理中读取像素值,这意味着我无法更新position属性并重新计算CPU上的法线。nre@mystaticselfmystaticself:n尽管值得进行性能测试。法线计算没有那么昂贵,但如果n Calculate vertex normals for indexed PlaneBufferGeometry in vertex shader after displacementn

three.js置换后,在顶点着色器中计算索引几何体的顶点法线 为WP2原创文章,链接:https://www.wp2.cn/three-js/three-js%e7%bd%ae%e6%8d%a2%e5%90%8e%ef%bc%8c%e5%9c%a8%e9%a1%b6%e7%82%b9%e7%9d%80%e8%89%b2%e5%99%a8%e4%b8%ad%e8%ae%a1%e7%ae%97%e7%b4%a2%e5%bc%95%e5%87%a0%e4%bd%95%e4%bd%93%e7%9a%84%e9%a1%b6%e7%82%b9/