Math 使用波浪状顶点着色器计算球体上的法线

Math 使用波浪状顶点着色器计算球体上的法线,math,vector,graphics,normals,Math,Vector,Graphics,Normals,我一直在尝试使用顶点着色器为我正在处理的球体获取正确的法线。该算法可以简单地归结为 垂直xyz+=max0,sintime+0.004*垂直x*10*normal.xyz 这会导致波在球体上滚动。 为了使我的法线正确,我还需要变换它们。我可以取给定x,y,z的切向量,得到一个垂直向量0,-vert.z,vert.y,然后与perp向量相交 虽然我在数学方面遇到了一些问题,但在这一点上,这已经成为了个人恩怨。对于导数,我已经解了几百次了,但是我总是得到错误的结果。我怎样才能得到切线? 分解上面这行

我一直在尝试使用顶点着色器为我正在处理的球体获取正确的法线。该算法可以简单地归结为

垂直xyz+=max0,sintime+0.004*垂直x*10*normal.xyz

这会导致波在球体上滚动。 为了使我的法线正确,我还需要变换它们。我可以取给定x,y,z的切向量,得到一个垂直向量0,-vert.z,vert.y,然后与perp向量相交

虽然我在数学方面遇到了一些问题,但在这一点上,这已经成为了个人恩怨。对于导数,我已经解了几百次了,但是我总是得到错误的结果。我怎样才能得到切线? 分解上面这行,我可以做一个数学函数

fx,y,z=max0,sintime+0.004*x*10*Normx,y,z+x,y,z

诺姆。。是球面的中心

什么是正确的f'x,y,z

我已经解释了f中最大值造成的奇怪,所以这不是问题所在

编辑:我现在最成功的算法如下:

切线向量.x=0.004*10*cos0.004*垂直x+时间*norm.x+10*sin0.004*垂直x+时间+1

切线向量.y=10*sin0.004*vert.x+时间+1

切线向量.z=10*sin0.004*vert.x+时间+1

第二个切线向量。x=0

第二个切线向量.y=-norm.z

第二个切线向量.z=范数.y

对两者进行规格化,并执行交叉切线2、切线1。再次规格化,并完成它应该是CrossTangent1,Tangent2,但这似乎有更好的结果。。。更多关于我数学问题的提示

这就产生了


如果曲面点呈非线性分布,或者存在某些数学奇点,或者如果出现数学错误(99.99%的情况下),通过函数导数获取切线/法线有时会失败。无论如何,您始终可以使用几何方法:

一,。你可以很容易地得到切线

Ux,y,z=fx+d,y,z-fx,y,z; Vx,y,z=fx,y+d,z-fx,y,z; 其中d是一个足够小的台阶 fx,y,z是当前曲面点的计算 不知道为什么要使用3个输入变量,我只会使用2个 但是,如果移位的点与未移位的点相同 改用它=fx,y,z+d-fx,y,z; 最后,不要忘记将U、V大小规格化为单位向量 二,。下一步

如果项目符号1导致正确的法线 然后你可以简单地用代数方法解U,V 所以重写Ux,y,z=fx+d,y,z-fx,y,z;完全平衡 用曲面点方程替换fx,y,z 简化 [附注]

有时,选择好的d可以将标准化简化为乘以常数 应添加法线可视化,例如: 要真正了解调试目的的实际情况
非常感谢您的回复!我担心我的帖子会被忽略:然而,这并不是我真正想要的。我之前有一个类似的解决方案,涉及以递增的方式逐步执行,但它对我来说不够平滑。我通过UE4实现了这一点,这就是为什么我的轴如此奇怪,所以虽然我无法实现正确的法线可视化,但我可以使用法线的xyz值将其着色为rgb,这很有帮助。我更喜欢有一个合适的切向量,并将它与另一个切向量交叉以求解法线,但我不知道我的math@jmoak3在这种情况下,您应该从重新格式化顶点函数开始,以形成:surface_point=fu,v,因为在当前状态下,方程两边都有顶点,我认为这不是一个好主意,这也是问题的原因。对于函数f的参数,使用你必须使用的东西,而不仅仅是u,v,texample@jmoak3若步进法不够光滑,若它仍然不起作用,那个么你们的曲面方程就不是你们所想的……我会再试一次,你们的方法应该行得通。我将继续并将其标记为正确,感谢您的知识渊博和帮助: