解决opengl计算顶点的法线问题

        由于须要的论文,最近开始学习OpenGL。因为刚入门的初学者有这么总会遇到不少问题,。学习

这些天,好不容易才OpenGL个问题弄明确了。spa

        几点迷惑:.net

  1. 在网上百度。发现很是多求平面法向量的介绍以及程序。后面才知道顶点法向量才是我要的。
  2. 对于空间中的三个点。怎么肯定平面法向量的方法?这里可以经过尝试顺时针和逆时针结合结果图来推断。如下简介下如何进行若是。

        怎样经过若是方法推断平面法向量的方向(这里是指三角面片):code

        首先,固然要有数据,就是原始数据中每个面片是由那三个顶点组成。比方现在空间中有一个三角形平面由三个顶点A,B,C组成。blog

        接着。就会存在如下两种状况,例如如下图:ip

所以,咱们在程序中仅仅要反着试一次,就会获得咱们的结果了。get

如下我给出个人部分代码已经效果图(斯坦福大学著名的bunny模型):入门

当中,A和B是后面要进行叉乘的两个向量,point1,point2,point3就是三角面片的三个顶点。class


状况1:百度

		A[X] = point2[X] - point1[X];
		A[Y] = point2[Y] - point1[Y];
		A[Z] = point2[Z] - point1[Z];
		B[X] = point1[X] - point3[X];
		B[Y] = point1[Y] - point3[Y];
		B[Z] = point1[Z] - point3[Z];

状况2:

		<span style="color:#000000;">A[X] = point3[X] - point1[X];
		A[Y] = point3[Y] - point1[Y];
		A[Z] = point3[Z] - point1[Z];
		B[X] = point1[X] - point2[X];
		B[Y] = point1[Y] - point2[Y];
		B[Z] = point1[Z] - point2[Z];</span>


        从上面两种状况可以看出。它们确实是相反的。

本身再实际操做的时候可以去尝试一下。


计算顶点法向量的过程记录:

        首先,咱们要了解几个概念,平面法向量(平面上两个不平行。不共线的向量叉乘获得),顶点法向量(以这个点为顶点的所有三角形的法向量之和)。

        接着,咱们就可以经过三个顶点求得两个向量,两个向量叉乘获得平面法向量。(平面法向量进行归一化)

        而后,统计每个顶点的所有平面法向量之和。(顶点法向量进行归一化)


bunny数据文件下载连接

bunny数据包括顶点数据和顶点法向量数据连接

第一链接是bunny一些数据模型格档,第二个环节是一个包括bunny顶点数据模型和已计算出的顶点法向矢量数据。

计算,咱们能够本身用顶点数据顶点的法线,在顶点的法线进行比较,而后,和文件,写你本身的计算,验证顶点正常的程序是正确与否。

相关文章
相关标签/搜索