关于生成地形的法线问题
2008-09-27 01:41
211 查看
刚发现(或者说解决..)的新问题,使用高洛德光照的时候,地面反光并不明显,也不真实,,我怀疑顶点的法线计算错了.
事实上,,资料里看到的顶点法线向量就是该顶点的坐标向量,即:
V[vNum].n.x = V[vNum].p.x;
V[vNum].n.y = V[vNum].p.y;
V[vNum].n.z = V[vNum].p.z;
但我一开始就觉得不对劲,所以自行修改了,根据自己对法向量的理解,它应该是垂直于顶点所在平面的,但在这个程序里,每个顶点都是六个三角面的交点,那么该顶点的法向量就应该是这六个三角面的法向量之和咯.
于是在每个顶点处,都先求出交汇于此点的六条边的向量,然后通过叉乘运算求出六个三角面的法向量,再加起来做Normalize运算,这就是顶点的法向量了.虽然复杂,但我以为这才是正确的法线...15分钟前,我知道自己错了.
在这里再补充一个关于向量叉乘的知识:比如顶点A是三角面ABC的一个顶点,那么向量AB和向量AC的叉乘就是垂直于该三角面的.
反正还是我自己错了,,改回到资料里那样,就能正常反光,虽然还是不太真实,需要一些调试~~至于法线为什么是这样设置的,明天再研究,上最后一张图.
事实上,,资料里看到的顶点法线向量就是该顶点的坐标向量,即:
V[vNum].n.x = V[vNum].p.x;
V[vNum].n.y = V[vNum].p.y;
V[vNum].n.z = V[vNum].p.z;
但我一开始就觉得不对劲,所以自行修改了,根据自己对法向量的理解,它应该是垂直于顶点所在平面的,但在这个程序里,每个顶点都是六个三角面的交点,那么该顶点的法向量就应该是这六个三角面的法向量之和咯.
于是在每个顶点处,都先求出交汇于此点的六条边的向量,然后通过叉乘运算求出六个三角面的法向量,再加起来做Normalize运算,这就是顶点的法向量了.虽然复杂,但我以为这才是正确的法线...15分钟前,我知道自己错了.
在这里再补充一个关于向量叉乘的知识:比如顶点A是三角面ABC的一个顶点,那么向量AB和向量AC的叉乘就是垂直于该三角面的.
反正还是我自己错了,,改回到资料里那样,就能正常反光,虽然还是不太真实,需要一些调试~~至于法线为什么是这样设置的,明天再研究,上最后一张图.
相关文章推荐
- 解决地形生成各方块边界法线不统一的问题
- 关于使用vc++调用matlab生成的dll传递数组的问题
- 关于freemarker静态化生成html页面 乱码的问题
- 关于PowerDesigner15不能从PDM图生成MS SQL2005/2008外键约束的问题
- 关于Decorator Pattern 被包装的对象生成顺序的问题
- 关于HBuilder生成app时,plus.push推送SDK权限问题__选用个推方案
- 关于静态页生成问题 突破form数量限制
- Java Api 高效地生成等比例缩略图 关于cmyk模式图片问题的解决
- 关于生成树主根,次根的问题
- 关于条形码生成 及在打印页显示不出来的问题(BarCodeToHTML.cs)
- 关于用jsp生成xml的问题【原创】
- 关于PowerDesigner15不能从PDM图生成MS SQL2005/2008外键约束的问题
- 关于后台生成的模板列的数据绑定问题
- 关于appfuse里自动生成的tablemanager的使用问题
- 还是关于pdflatex生成的文件复制粘贴出现乱码问题
- 关于VS2008问题“无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件。“
- 关于【源文件与模块生成时的文件不同】问题的解决
- Day3:关于地形生成
- asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案
- 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题