【发布时间】:2022-01-04 13:42:03
【问题描述】:
我是一名学习DirectX 11的学生。要计算曲面的法向量,我知道我需要得到两个切向量来计算叉积。但是如果有表面方程我可以做到。
如果我不知道曲面的方程/公式,我必须使用有限差分法得到法向量的近似值。下面的代码来自我正在阅读的书。
for(UINT i = 1; i < mNumRows-1; ++i)
{
for(UINT j = 1; j < mNumCols-1; ++j)
{
float l = mCurrSolution[i*mNumCols+j-1].y;
float r = mCurrSolution[i*mNumCols+j+1].y;
float t = mCurrSolution[(i-1)*mNumCols+j].y;
float b = mCurrSolution[(i+1)*mNumCols+j].y;
mNormals[i*mNumCols+j].x = -r+l;
mNormals[i*mNumCols+j].y = 2.0f*mSpatialStep;
mNormals[i*mNumCols+j].z = b-t;
XMVECTOR n = XMVector3Normalize(XMLoadFloat3(&mNormals[i*mNumCols+j]));
XMStoreFloat3(&mNormals[i*mNumCols+j], n);
}
}
我不明白为什么值-r+l 和b-t(y 值的差)分别成为法线向量的x 值和z 值。我想知道为什么2.0f * mSpatialStep 也是 y 值。
【问题讨论】:
标签: graphics directx numerical-analysis