我正在尝试使用GPU进行布料模拟,我遇到了一些不同硬件的问题.我使用threejs作为框架,但我认为这与我遇到的问题无关.
基本上我做的是上传一个矩阵和该矩阵的逆矩阵,以便将点从局部坐标转换为世界,在世界坐标中进行一些数学运算(如碰撞检测),然后将它们转换回本地.当我使用浮点纹理时,这在我的笔记本电脑上工作得很好,但是我在手机上注意到有一些奇怪的文物:
正确: 
不正确的: 
在做了一些调试后,我把它缩小到两个问题.它们都与小数精度有关.由于约束(以及约束期间的精度问题)导致的顶点折叠以及使用矩阵乘法和逆时的精度损失.
我认为这个问题与精度有关的原因是因为如果我使用浮点纹理它可以在我的计算机上工作,但如果我使用半浮点数我会遇到同样的问题.我的手机支持浮点纹理,这也是我为什么会在手机上发生这种情况的原因之一.我把问题缩小了,所以所有的布料模拟都被禁用了,如果我在我的计算机上运行半浮动纹理的应用程序,没有任何重力但是转换并反转平面类型的闪烁以奇怪的方式
如果转换和反转被禁用,那么它看起来很正常.
我不知道如何处理这个问题,或者我是否正走在正确的道路上.我相信半浮点纹理具有有限的小数精度,但我不明白为什么这会导致我的问题,因为它应该只影响着色器的输出,而不是着色器中的数学运算.
着色器的代码如下所示:
' vec2 cellSize = 1.0 / res;',
' vec4 pos = texture2D(vertexPositions, vuv.xy );',
' vec2 newUV;',
' if(type == 0.0){',
' float px = floor(vuv.x * res.x );',
' float spacingx = px- (2.0 * floor(px/2.0));',
' float py = floor(vuv.y * res.y );',
' float spacingy = py- (2.0 * floor(py/2.0));',
' float total = spacingx + spacingy;',
' total = total- (2.0 * floor(total/2.0));',
' if(total == 0.0){', …Run Code Online (Sandbox Code Playgroud) 所以我正在努力建造一个牵引器.我按照本教程:https://www.youtube.com/watch?v = SMOJGxyd9BE&list = PLHm_I0tE5kKPPWXkTTtOn8fkcwEGZNETh&index = 9
所以一切都很好,除了遇到一个问题.我试图让球体在球体下反射,但是当我这样做时,我得到了这种奇怪的效果

如果你注意到地面上的反射有这些黑点.我一直试图找出最新情况,但奇怪的是因为整个飞机具有相同的法线,所以反射应该是正确的.有没有人有这方面的经验?我检查了它与阴影无关.