📄 figure.cpp
字号:
glEnable(GL_NORMALIZE);
glPushMatrix();
Figure3D::Display();
Figure::Display();
glScalef(m_fXLength,m_fYLength,m_fZLength);
if (m_bCurFigure)
{
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glLineWidth(1);
glColor3f(1,1,1);
glBegin(GL_LINES);
//左上前
glVertex3f(-0.6,0.6,0.6);
glVertex3f(-0.3,0.6,0.6);
glVertex3f(-0.6,0.6,0.6);
glVertex3f(-0.6,0.3,0.6);
glVertex3f(-0.6,0.6,0.6);
glVertex3f(-0.6,0.6,0.3);
//左下前
glVertex3f(-0.6,-0.6,0.6);
glVertex3f(-0.3,-0.6,0.6);
glVertex3f(-0.6,-0.6,0.6);
glVertex3f(-0.6,-0.3,0.6);
glVertex3f(-0.6,-0.6,0.6);
glVertex3f(-0.6,-0.6,0.3);
//右下前
glVertex3f(0.6,-0.6,0.6);
glVertex3f(0.3,-0.6,0.6);
glVertex3f(0.6,-0.6,0.6);
glVertex3f(0.6,-0.3,0.6);
glVertex3f(0.6,-0.6,0.6);
glVertex3f(0.6,-0.6,0.3);
//右上前
glVertex3f(0.6,0.6,0.6);
glVertex3f(0.3,0.6,0.6);
glVertex3f(0.6,0.6,0.6);
glVertex3f(0.6,0.3,0.6);
glVertex3f(0.6,0.6,0.6);
glVertex3f(0.6,0.6,0.3);
//左上后
glVertex3f(-0.6,0.6,-0.6);
glVertex3f(-0.3,0.6,-0.6);
glVertex3f(-0.6,0.6,-0.6);
glVertex3f(-0.6,0.3,-0.6);
glVertex3f(-0.6,0.6,-0.6);
glVertex3f(-0.6,0.6,-0.3);
//左下后
glVertex3f(-0.6,-0.6,-0.6);
glVertex3f(-0.3,-0.6,-0.6);
glVertex3f(-0.6,-0.6,-0.6);
glVertex3f(-0.6,-0.3,-0.6);
glVertex3f(-0.6,-0.6,-0.6);
glVertex3f(-0.6,-0.6,-0.3);
//右下后
glVertex3f(0.6,-0.6,-0.6);
glVertex3f(0.3,-0.6,-0.6);
glVertex3f(0.6,-0.6,-0.6);
glVertex3f(0.6,-0.3,-0.6);
glVertex3f(0.6,-0.6,-0.6);
glVertex3f(0.6,-0.6,-0.3);
//右上后
glVertex3f(0.6,0.6,-0.6);
glVertex3f(0.3,0.6,-0.6);
glVertex3f(0.6,0.6,-0.6);
glVertex3f(0.6,0.3,-0.6);
glVertex3f(0.6,0.6,-0.6);
glVertex3f(0.6,0.6,-0.3);
glEnd();
glPopAttrib();
}
glColor3fv(m_afColor);
glCallList(m_nDispList);
glPopMatrix();
glDisable(GL_NORMALIZE);
}
//========二次对象图形实现=========
Quadric::Quadric(float precision,float *CenterPos) : m_fPrecision(precision),
Figure3D(CenterPos)
{
m_qObj = gluNewQuadric();
gluQuadricNormals(m_qObj,GLU_SMOOTH);
}
Quadric::~Quadric()
{
gluDeleteQuadric(m_qObj);
}
//=======3D球形类实现=========
Sphere::Sphere(float *initList) : Quadric(initList[4],&initList[0]),
m_fRadius(initList[3])
{
m_afColor[0] = initList[5];
m_afColor[1] = initList[6];
m_afColor[2] = initList[7];
}
Sphere::~Sphere()
{
}
void Sphere::Display() const
{
glPushMatrix();
Figure3D::Display();
Figure::Display();
if (m_bCurFigure)
{
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glLineWidth(1);
glColor3f(1,1,1);
glBegin(GL_LINES);
//左上前
glVertex3f(-m_fRadius,m_fRadius,m_fRadius);
glVertex3f(-m_fRadius / 2,m_fRadius,m_fRadius);
glVertex3f(-m_fRadius,m_fRadius,m_fRadius);
glVertex3f(-m_fRadius,m_fRadius / 2,m_fRadius);
glVertex3f(-m_fRadius,m_fRadius,m_fRadius);
glVertex3f(-m_fRadius,m_fRadius,m_fRadius / 2);
//左下前
glVertex3f(-m_fRadius,-m_fRadius,m_fRadius);
glVertex3f(-m_fRadius / 2,-m_fRadius,m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius,m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius / 2,m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius,m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius,m_fRadius / 2);
//右下前
glVertex3f(m_fRadius,-m_fRadius,m_fRadius);
glVertex3f(m_fRadius / 2,-m_fRadius,m_fRadius);
glVertex3f(m_fRadius,-m_fRadius,m_fRadius);
glVertex3f(m_fRadius,-m_fRadius / 2,m_fRadius);
glVertex3f(m_fRadius,-m_fRadius,m_fRadius);
glVertex3f(m_fRadius,-m_fRadius,m_fRadius / 2);
//右上前
glVertex3f(m_fRadius,m_fRadius,m_fRadius);
glVertex3f(m_fRadius / 2,m_fRadius,m_fRadius);
glVertex3f(m_fRadius,m_fRadius,m_fRadius);
glVertex3f(m_fRadius,m_fRadius / 2,m_fRadius);
glVertex3f(m_fRadius,m_fRadius,m_fRadius);
glVertex3f(m_fRadius,m_fRadius,m_fRadius / 2);
//左上后
glVertex3f(-m_fRadius,m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius / 2,m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius,m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius,m_fRadius / 2,-m_fRadius);
glVertex3f(-m_fRadius,m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius,m_fRadius,-m_fRadius / 2);
//左下后
glVertex3f(-m_fRadius,-m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius / 2,-m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius / 2,-m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius,-m_fRadius);
glVertex3f(-m_fRadius,-m_fRadius,-m_fRadius / 2);
//右下后
glVertex3f(m_fRadius,-m_fRadius,-m_fRadius);
glVertex3f(m_fRadius / 2,-m_fRadius,-m_fRadius);
glVertex3f(m_fRadius,-m_fRadius,-m_fRadius);
glVertex3f(m_fRadius,-m_fRadius / 2,-m_fRadius);
glVertex3f(m_fRadius,-m_fRadius,-m_fRadius);
glVertex3f(m_fRadius,-m_fRadius,-m_fRadius / 2);
//右上后
glVertex3f(m_fRadius,m_fRadius,-m_fRadius);
glVertex3f(m_fRadius / 2,m_fRadius,-m_fRadius);
glVertex3f(m_fRadius,m_fRadius,-m_fRadius);
glVertex3f(m_fRadius,m_fRadius / 2,-m_fRadius);
glVertex3f(m_fRadius,m_fRadius,-m_fRadius);
glVertex3f(m_fRadius,m_fRadius,-m_fRadius / 2);
glEnd();
glPopAttrib();
}
glColor3fv(m_afColor);
gluSphere(m_qObj,m_fRadius,m_fPrecision,m_fPrecision * 10);
glPopMatrix();
}
//========3D圆柱体实现========
Cylinder::Cylinder(float *initList) : Quadric(initList[6],&initList[0]),
m_fTopRadius(initList[3]),
m_fBaseRadius(initList[4]),
m_fHeight(initList[5])
{
m_afColor[0] = initList[7];
m_afColor[1] = initList[8];
m_afColor[2] = initList[9];
}
Cylinder::~Cylinder()
{
}
void Cylinder::Display() const
{
glColor3fv(m_afColor);
glPushMatrix();
Figure3D::Display();
Figure::Display();
glTranslatef(0,0,-m_fHeight / 2);
gluCylinder(m_qObj,m_fBaseRadius,m_fTopRadius,m_fHeight,m_fPrecision,m_fPrecision);
glPushMatrix();
glTranslatef(0,0,m_fHeight);
gluDisk(m_qObj,0,m_fTopRadius,30,30);
glPopMatrix();
glPushMatrix();
glRotatef(180,0,1,0);
gluDisk(m_qObj,0,m_fBaseRadius,30,30);
glPopMatrix();
if (m_bCurFigure)
{
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glPushMatrix();
glTranslatef(0,0,m_fHeight / 2);
float width = (m_fBaseRadius > m_fTopRadius) ? m_fBaseRadius : m_fTopRadius;
glColor3f(1,1,1);
glLineWidth(1);
glBegin(GL_LINES);
//左上前
glVertex3f(-width,width,m_fHeight / 2);
glVertex3f(-width / 2,width,m_fHeight / 2);
glVertex3f(-width,width,m_fHeight / 2);
glVertex3f(-width,width / 2,m_fHeight / 2);
glVertex3f(-width,width,m_fHeight / 2);
glVertex3f(-width,width,m_fHeight / 4);
//左下前
glVertex3f(-width,-width,m_fHeight / 2);
glVertex3f(-width / 2,-width,m_fHeight / 2);
glVertex3f(-width,-width,m_fHeight / 2);
glVertex3f(-width,-width / 2,m_fHeight / 2);
glVertex3f(-width,-width,m_fHeight / 2);
glVertex3f(-width,-width,m_fHeight / 4);
//右下前
glVertex3f(width,-width,m_fHeight / 2);
glVertex3f(width / 2,-width,m_fHeight / 2);
glVertex3f(width,-width,m_fHeight / 2);
glVertex3f(width,-width / 2,m_fHeight / 2);
glVertex3f(width,-width,m_fHeight / 2);
glVertex3f(width,-width,m_fHeight / 4);
//右上前
glVertex3f(width,width,m_fHeight / 2);
glVertex3f(width / 2,width,m_fHeight / 2);
glVertex3f(width,width,m_fHeight / 2);
glVertex3f(width,width / 2,m_fHeight / 2);
glVertex3f(width,width,m_fHeight / 2);
glVertex3f(width,width,m_fHeight / 4);
//左上后
glVertex3f(-width,width,-m_fHeight / 2);
glVertex3f(-width / 2,width,-m_fHeight / 2);
glVertex3f(-width,width,-m_fHeight / 2);
glVertex3f(-width,width / 2,-m_fHeight / 2);
glVertex3f(-width,width,-m_fHeight / 2);
glVertex3f(-width,width,-m_fHeight / 4);
//左下后
glVertex3f(-width,-width,-m_fHeight / 2);
glVertex3f(-width / 2,-width,-m_fHeight / 2);
glVertex3f(-width,-width,-m_fHeight / 2);
glVertex3f(-width,-width / 2,-m_fHeight / 2);
glVertex3f(-width,-width,-m_fHeight / 2);
glVertex3f(-width,-width,-m_fHeight / 4);
//右下后
glVertex3f(width,-width,-m_fHeight / 2);
glVertex3f(width / 2,-width,-m_fHeight / 2);
glVertex3f(width,-width,-m_fHeight / 2);
glVertex3f(width,-width / 2,-m_fHeight / 2);
glVertex3f(width,-width,-m_fHeight / 2);
glVertex3f(width,-width,-m_fHeight / 4);
//右上后
glVertex3f(width,width,-m_fHeight / 2);
glVertex3f(width / 2,width,-m_fHeight / 2);
glVertex3f(width,width,-m_fHeight / 2);
glVertex3f(width,width / 2,-m_fHeight / 2);
glVertex3f(width,width,-m_fHeight / 2);
glVertex3f(width,width,-m_fHeight / 4);
glEnd();
glPopMatrix();
glPopAttrib();
}
glPopMatrix();
}
//========Disk类实现=========
Disk::Disk(float *initList) : Quadric(initList[6],&initList[0]),
m_fInRadius(initList[3]),
m_fOutRadius(initList[4]),
m_fHeight(initList[5])
{
m_afColor[0] = initList[7];
m_afColor[1] = initList[8];
m_afColor[2] = initList[9];
}
Disk::~Disk()
{
}
void Disk::Display() const
{
glColor3fv(m_afColor);
glPushMatrix();
Figure3D::Display();
Figure::Display();
glPushMatrix();
glRotatef(180,0,1,0);
glTranslatef(0,0,m_fHeight / 2);
gluDisk(m_qObj,m_fInRadius,m_fOutRadius,m_fPrecision,m_fPrecision);
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,m_fHeight / 2);
gluDisk(m_qObj,m_fInRadius,m_fOutRadius,m_fPrecision,m_fPrecision);
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,-m_fHeight / 2);
gluCylinder(m_qObj,m_fInRadius,m_fInRadius,m_fHeight,m_fPrecision,m_fPrecision);
gluCylinder(m_qObj,m_fOutRadius,m_fOutRadius,m_fHeight,m_fPrecision,m_fPrecision);
glPopMatrix();
if (m_bCurFigure)
{
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glColor3f(1,1,1);
glLineWidth(1);
glBegin(GL_LINES);
//左上前
glVertex3f(-m_fOutRadius,m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius / 2,m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius / 2,m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius,m_fHeight / 4);
//左下前
glVertex3f(-m_fOutRadius,-m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius / 2,-m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius / 2,m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius,m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius,m_fHeight / 4);
//右下前
glVertex3f(m_fOutRadius,-m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius / 2,-m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius / 2,m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius,m_fHeight / 4);
//右上前
glVertex3f(m_fOutRadius,m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius / 2,m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius / 2,m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius,m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius,m_fHeight / 4);
//左上后
glVertex3f(-m_fOutRadius,m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius / 2,m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius / 2,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,m_fOutRadius,-m_fHeight / 4);
//左下后
glVertex3f(-m_fOutRadius,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius / 2,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius / 2,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(-m_fOutRadius,-m_fOutRadius,-m_fHeight / 4);
//右下后
glVertex3f(m_fOutRadius,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius / 2,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius / 2,-m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius,-m_fOutRadius,-m_fHeight / 4);
//右上后
glVertex3f(m_fOutRadius,m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius / 2,m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius / 2,-m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius,-m_fHeight / 2);
glVertex3f(m_fOutRadius,m_fOutRadius,-m_fHeight / 4);
glEnd();
glPopAttrib();
}
glPopMatrix();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -