我正在尝试做一个水的几何着色器,使用一个正弦波。
对于每个顶点,我计算x和y的正弦,然后将顶点偏移到结果*法线。
因为我偏移了我的顶点,所以我必须重新计算我的法线,但如果我使用他们的三角形来计算,我会得到坚硬的边缘,而它应该是平滑的波浪。
我知道我应该使用正弦函数并从中得到3D法线,但我感到困惑。
发布于 2014-06-12 11:28:47
z = a * sin(b * x) * sin(b * y)我将逐步介绍这个过程,所以即使您的函数看起来略有不同,您也应该能够应用该配方。此外,如果您的波不是相对于xy平面的,您仍然可以使用相同的计算,然后将必要的变换矩阵应用于生成的法线。
我们这里有一个参数曲面,其中平面上一个点的3个坐标是由两个参数计算出来的。在本例中,参数为x和y,描述每个点的向量为:
[ x ]
v(x, y) = [ y ]
[ a * sin(b * x) * sin(b * y) ]计算所需的数学工具是基本分析(导数)和一些矢量几何(叉积)。
作为第一步,我们计算这两个参数的梯度向量。这些梯度矢量由每个矢量分量与相应参数的偏导数组成。在该示例中,结果为:
[ 1 ]
dv(x, y)/dx = [ 0 ]
[ a * b * cos(b * x) * sin(b * y) ]
[ 0 ]
dv(x, y)/dy = [ 1 ]
[ a * b * sin(b * x) * cos(b * y) ] [ - a * b * cos(b * x) * sin(b * y) ]
vn = [ - a * b * sin(b * x) * cos(b * y) ]
[ 1 ]然后对这个向量进行归一化,vn / |vn|就是你的法向量。
发布于 2014-06-11 23:04:27
你需要得到x和y的导数,这样你就可以构造两个向量1,0,x'和0,1,y',然后你得到叉积并进行归一化。这将是正常的。
https://stackoverflow.com/questions/24165608
复制相似问题