上一课中,我教您如何在ArcEngine中创建一个OpenGL窗口。这一课中,我将教您如何创建三角形。我们讲使用GL_TRIANGLES来创建一个三角形。
1、 获取三角形三个点的经纬度,然后转化为地心坐标。
//Convert the mouse coordinate into a geocentric (OpenGL) coordinate system.
double glX, glY, glZ;
m_globeViewUtil.GeographicToGeocentric(40.56046, 0.03374, 5, out glX, out glY, out glZ);
double glX1, glY1, glZ1;
m_globeViewUtil.GeographicToGeocentric(40.56046, 0.0325, 5, out glX1, out glY1, out glZ1);
double glX2, glY2, glZ2;
m_globeViewUtil.GeographicToGeocentric(40.56229, 0.03249, 120, out glX2, out glY2, out glZ2);
2、 开始绘制三角形。
GL.glBegin(GL.GL_TRIANGLES);
lBegin(GL_TRIANGLES)的意思是开始绘制三角形,glEnd() 告诉OpenGL三角形已经创建好了。通常您会需要画3个顶点,可以使用GL_TRIANGLES。在绝大多数的显卡上,绘制三角形是相当快速的。如果要 画四个顶点,使用GL_QUADS的话会更方便。但据我所知,绝大多数的显卡都使用三角形来为对象着色。最后,如果您想要画更多的顶点时,可以使用 GL_POLYGON。
1、 获取三角形三个点的经纬度,然后转化为地心坐标。
//Convert the mouse coordinate into a geocentric (OpenGL) coordinate system.
double glX, glY, glZ;
m_globeViewUtil.GeographicToGeocentric(40.56046, 0.03374, 5, out glX, out glY, out glZ);
double glX1, glY1, glZ1;
m_globeViewUtil.GeographicToGeocentric(40.56046, 0.0325, 5, out glX1, out glY1, out glZ1);
double glX2, glY2, glZ2;
m_globeViewUtil.GeographicToGeocentric(40.56229, 0.03249, 120, out glX2, out glY2, out glZ2);
2、 开始绘制三角形。
GL.glBegin(GL.GL_TRIANGLES);
lBegin(GL_TRIANGLES)的意思是开始绘制三角形,glEnd() 告诉OpenGL三角形已经创建好了。通常您会需要画3个顶点,可以使用GL_TRIANGLES。在绝大多数的显卡上,绘制三角形是相当快速的。如果要 画四个顶点,使用GL_QUADS的话会更方便。但据我所知,绝大多数的显卡都使用三角形来为对象着色。最后,如果您想要画更多的顶点时,可以使用 GL_POLYGON。
本节的简单示例中,我们只画一个三角形。如果要画第二个三角形的话,可以在这三点之后,再加三行代码(3点)。所有六点代码都应包含在glBegin (GL_TRIANGLES)和glEnd()之间。在他们之间再不会有多余的点出现,也就是说,(GL_TRIANGLES)和glEnd()之间的点 都是以三点为一个集合的。这同样适用于四边形。如果您知道实在绘制四边形的话,您必须在第一个四点之后,再加上四点为一个集合的点组。另一方面,多边形可 以由任意个顶点,(GL_POLYGON)不在乎glBegin(GL_TRIANGLES)和glEnd()之间有多少行代码。
glBegin之后的第一行设置了多边形的第一个顶点,glVertex 的第一个参数是X坐标,然后依次是Y坐标和Z坐标。第一个点是上顶点,然后是左下顶点和右下顶点。glEnd()告诉OpenGL没有其他点了。这样将显示一个填充的三角形。
3、OpenGL代码
// GL.glPointSize(50.0f);
GL.glColor3ub(255, 255, 0);
GL.glBegin(GL.GL_TRIANGLES);
GL.glVertex3f((float)glX, (float)glY, (float)glZ);
GL.glVertex3f((float)glX1, (float)glY1, (float)glZ1);
GL.glVertex3f((float)glX2, (float)glY2, (float)glZ2);
GL.glEnd();
4、绘制效果