使用三角形绘制3D模型
三角形是基本的多边形,任何多变形都能由三角形组成。三角形是由三个顶点的连线组成。三个点分别是v0;v1;v2。
1、绕法
从某个顶点开始,有两种连线的方法,顺时针和逆时针,这是两种不同的绕法。
2、连接多个三角形
三角形能拼出任何多边形平面或曲面。所以对于平面或曲面,我们只需要保存组成这个面的所有三角形的顶点以及拼法即可。例如某个面有n个三角形组成,我们需要保存3n个顶点。如果我们我比较好的方法,可以减少保存顶点的个数,那么将大大减少内存。以下两种方法能够实现我们的想法。
(1)三角条
如上图,该面由三个三角形组成,假设我们以逆时针为正方形的绕法。
绘制第一个三角形式,我们需要知道三个顶点v0;v1;v2;绘制第二个三角形是,由于应用到第一个三角形的两个顶点v1;v2;所以我们只需要知道(保存)一个顶点(v3)即可;同样的方法绘制第三个三角形。理想情况下,按这种方法,一个面如果由n个三角形拼接成,那么我们只需要保存n+2个顶点即可。
这种方法是以新绘制的三角形利用到前面最后一次绘制的三角形的最后两个顶点。
(2)三角扇形
这种方法跟上面的方法不同的地方是,这里的新绘制的三角形利用到前面已经绘制三角形的顶点是v0(初始顶点)和前面最后一次增加的顶点。如上图所示。
与第一种方法一样,这种方法在理想的情况向,需要保存的顶点个数为n+2。
3、使用三角扇形绘制一个锥体
(1)以锥体的顶点为原点,通过三角扇形的方法绘制锥体的侧面
a)设置以顺时针的方向为正方向:
glFrontFace(GL_CW);
b)设置以三角扇的绘制方法:
glBegin(GL_TRIANGLE_FAN);
c)绘制侧面
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0.0f, 0.0f, 75.0f);
int ipvot = 0;
for(angle = 0.0f; angle < (2.0f * PI); angle += (PI / 8.0f))
{
x = 50.0f * sin(angle);
y = 50.0f * cos(angle);
if(ipvot % 2 == 0) glColor3f(0.0f, 1.0f, 0.0f);
else glColor3f(1.0f, 0.0f, 0.0f