1、网格建立函数
void CMyStatic::GLGrid(coordpoint& pt1, coordpoint& pt2,int num)
{
const float _xLen = (pt2.x -pt1.x) / num;
const float _yLen = (pt2.y - pt1.y) / num;
const float _zLen = (pt2.z - pt1.z) / num;
glLineWidth(1.0f);
glLineStipple(1, 0x0303);//线条样式
glBegin(GL_LINES);
glEnable(GL_LINE_SMOOTH);
//glColor3f(0.0f,0.0f, 1.0f); //白色线条
int xi = 0;
int yi = 0;
int zi = 0;
//绘制平行于X的直线
for (zi = 0; zi <= num; zi++)
{
float z = _zLen * zi + pt1.z;
for (yi = 0; yi <= num; yi++)
{
float y = _yLen * yi +pt1.y;
glVertex3f(pt1.x, y, z);
glVertex3f(pt2.x, y, z);
}
}
//绘制平行于Y的直线
for (zi = 0; zi <= num; zi++)
{
float z = _zLen * zi + pt1.z;
for (xi = 0; xi <= num; xi++)
{
float x = _xLen * xi +pt1.x;
glVertex3f(x, pt1.y, z);
glVertex3f(x, pt2.y, z);
}
}
//绘制平行于Z的直线
for (yi = 0; yi <= num; yi++)
{
float y = _yLen * yi + pt1.y;
for (xi = 0; xi <= num; xi++)
{
float x = _xLen * xi +pt1.x;
glVertex3f(x, y, pt1.z);
glVertex3f(x, y, pt2.z);
}
}
glEnd();
}
2、坐标轴建立函数
void CMyStatic::GLDrawSpaceAxes(void)
{
GLUquadricObj *objCylinder =gluNewQuadric();
glPushMatrix();
glColor3f(1.0f,1.0f, 1.0f);
glutSolidSphere(0.25,6,6);
glColor3f(0.0f,0.0f, 1.0f);
gluCylinder(objCylinder,0.1, 0.1, AXES_LEN, 10, 5); //Z
glTranslatef(0,0,AXES_LEN);
gluCylinder(objCylinder,0.3, 0.0, 0.6, 10, 5); //Z
glPopMatrix();
glPushMatrix();
glTranslatef(0,0.5,AXES_LEN);
glRotatef(90,0.0,1.0,0.0);
GLPrint("Z"); // Print GL Text ToThe Screen
glPopMatrix();
glPushMatrix();
glColor3f(0.0f,1.0f, 0.0f);
glRotatef(-90,1.0,0.0,0.0);
gluCylinder(objCylinder,0.1, 0.1, AXES_LEN, 10, 5); //Y
glTranslatef(0,0,AXES_LEN);
gluCylinder(objCylinder,0.3, 0.0, 0.6, 10, 5); //Y
glPopMatrix();
glPushMatrix();
glTranslatef(0.5,AXES_LEN,0);
GLPrint("Y"); // Print GL Text ToThe Screen
glPopMatrix();
glPushMatrix();
glColor3f(1.0f,0.0f, 0.0f);
glRotatef(90,0.0,1.0,0.0);
gluCylinder(objCylinder,0.1, 0.1, AXES_LEN, 10, 5); //X
glTranslatef(0,0,AXES_LEN);
gluCylinder(objCylinder,0.3, 0.0, 0.6, 10, 5); //X
glPopMatrix();
glPushMatrix();
glTranslatef(AXES_LEN,0.5,0);
GLPrint("X"); // Print GL Text ToThe Screen
glPopMatrix();
}
3、三维坐标网格实现
#define AXES_LEN 10 //坐标轴长
void CMyStatic::GLDrawCubeCoordinates(void)
{
/*****网格绘制*****/
/*****使用颜色混合来消除一些锯齿, 主要针对点和线
以及不相互重叠的多边形的反锯齿。*****/
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_POINT_SMOOTH); //设置反走样
glHint(GL_POINT_SMOOTH_HINT,GL_NICEST); //设置反走样
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT,GL_NICEST);
glEnable(GL_POLYGON_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST);
//绘制立体坐标系
GLUquadricObj *objCylinder =gluNewQuadric();
glRotatef(-45,0.0,1.0,0.0);
//确定坐标系原点
glPushMatrix();
glColor3f(1.0f,1.0f, 1.0f);
glTranslatef(-5,0,-5);
glutSolidSphere(0.2,20,20);
//glutSolidTorus(0.2,1,10,10);圆环
glPopMatrix();
//画网格线
coordpoint cpoint1 = {-5,0,-5};
coordpoint cpoint2 = {5,0,5};
glColor3f(0.9f,0.9f,0.9f);
GLGrid(cpoint1,cpoint2,10);
//画网格线
glPushMatrix();
{
glRotatef(90,1.0,0.0,0.0);
glTranslatef(0.0f,-5,-5);
coordpoint cpoint3 ={-5,00,-5};
coordpoint cpoint4 = {5,00,5};
glColor3f(0.9f,0.9f,0.0f);
GLGrid(cpoint3,cpoint4,10);
//半透明绘制
//glDepthMask(GL_FALSE);
//glColor3f(0.3,0.3,0.0);
//glTranslatef(0.0,5,0.0);
//glutSolidSphere(2,20,20);
//glDepthMask(GL_TRUE);
}
glPopMatrix();
//画网格线
glPushMatrix();
glRotatef(90,0.0,0.0,1.0);
glTranslatef(5,5,-0);
coordpoint cpoint5 ={-5,0,-5};
coordpoint cpoint6 = {5,0,5};
glColor3f(0.0f,0.9f,0.0f);
GLGrid(cpoint5,cpoint6,10);
glPopMatrix();
//画坐标轴
glPushMatrix();
glColor3f(0.0f, 1,0.0f);
glTranslatef(-5,0,-5);
gluCylinder(objCylinder,0.05, 0.05, AXES_LEN, 10, 5); //X
glTranslatef(0,0,AXES_LEN);
gluCylinder(objCylinder,0.2, 0.0, 0.5, 10, 5); //X
glPopMatrix();
glPushMatrix();
glTranslatef(-5,0,-5);
glTranslatef(0,0.2,AXES_LEN);
glRotatef(90,0.0,1.0,0.0);
GLPrint("X"); // Print GL Text ToThe Screen
glPopMatrix();
//画坐标轴
glPushMatrix();
glColor3f(1, 0,0.0f);
glTranslatef(-5,0,-5);
glRotatef(90,0.0,1.0,0.0);
gluCylinder(objCylinder,0.05, 0.05, AXES_LEN, 10, 5); //Y
glTranslatef(0,0,AXES_LEN);
gluCylinder(objCylinder,0.2, 0.0, 0.5, 10, 5); //Y
glPopMatrix();
glPushMatrix();
glTranslatef(-5,0,-5);
glRotatef(90,0.0,1.0,0.0);
glTranslatef(0,0.2,AXES_LEN);
glRotatef(90,0.0,1.0,0.0);
GLPrint("Y"); // Print GL Text ToThe Screen
glPopMatrix();
//画坐标轴
glPushMatrix();
glColor3f(1, 1,0.0f);
glTranslatef(-5,0,-5);
glRotatef(-90,1.0,0.0,0.0);
gluCylinder(objCylinder,0.05, 0.05, AXES_LEN, 10, 5); //Z
glTranslatef(0,0,AXES_LEN);
gluCylinder(objCylinder,0.2, 0.0, 0.5, 10, 5); //Z
glPopMatrix();
glPushMatrix();
glTranslatef(-5,0,-5);
glRotatef(-90,1.0,0.0,0.0);
glTranslatef(0.0,0.6,AXES_LEN);
glRotatef(90,0.0,1.0,0.0);
glRotatef(90,0.0,0.0,1.0);
GLPrint("Z"); // Print GL Text ToThe Screen
glPopMatrix();
/*****取消反锯齿*****/
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_POINT_SMOOTH);
glDisable(GL_POLYGON_SMOOTH);
}