OpenGL绘制有立体感的五边形
2012-05-25 09:21
218 查看
//不知道怎么描述,就是DNA分子模型中那个五边形的东西
//x,y,z为中心位置,r为半径,d为厚度,即前面或后面与中间之间的距离
void drawFivePolygn(GLfloat x, GLfloat y, GLfloat z, GLfloat r, GLfloat d)
{
int i=0; GLfloat frontFive[6][3]; GLfloat middleFive[6][3]; GLfloat backFive[6][3]; for(i=0; i<6; i++)
{
frontFive[i][0] = x+r*2/3*(cos(72.0*i*PI/180));
frontFive[i][1] = y+r*2/3*(sin(72.0*i*PI/180));
frontFive[i][2] = z+d;
backFive[i][0] = x+r*2/3*(cos(72.0*i*PI/180));
backFive[i][1] = y+r*2/3*(sin(72.0*i*PI/180));
backFive[i][2] = z-d; middleFive[i][0] = x+r*(cos(72.0*i*PI/180));
middleFive[i][1] = y+r*(sin(72.0*i*PI/180));
middleFive[i][2] = z;
} //前面的五边形
glBegin(GL_POLYGON);
for(i=0; i<=5; i++)
{
glVertex3fv(frontFive[i]);
}
glEnd(); //后面的五边形
glBegin(GL_POLYGON);
for(i=0; i<=5; i++)
{
glVertex3fv(backFive[i]);
}
glEnd(); glColor3f(1.0,0.0,0.0);
//前面边上的一圈四边形
glBegin(GL_QUADS);
for(i=0; i<=4; i++)
{
glVertex3fv(frontFive[i]);
glVertex3fv(middleFive[i]);
glVertex3fv(middleFive[(i+1)%5]);
glVertex3fv(frontFive[(i+1)%5]);
}
glEnd(); //后面边上的一圈四边形
glBegin(GL_QUADS);
for(i=0; i<=4; i++)
{
glVertex3fv(middleFive[i]);
glVertex3fv(backFive[i]);
glVertex3fv(backFive[(i+1)%5]);
glVertex3fv(middleFive[(i+1)%5]);
}
glEnd();}
//x,y,z为中心位置,r为半径,d为厚度,即前面或后面与中间之间的距离
void drawFivePolygn(GLfloat x, GLfloat y, GLfloat z, GLfloat r, GLfloat d)
{
int i=0; GLfloat frontFive[6][3]; GLfloat middleFive[6][3]; GLfloat backFive[6][3]; for(i=0; i<6; i++)
{
frontFive[i][0] = x+r*2/3*(cos(72.0*i*PI/180));
frontFive[i][1] = y+r*2/3*(sin(72.0*i*PI/180));
frontFive[i][2] = z+d;
backFive[i][0] = x+r*2/3*(cos(72.0*i*PI/180));
backFive[i][1] = y+r*2/3*(sin(72.0*i*PI/180));
backFive[i][2] = z-d; middleFive[i][0] = x+r*(cos(72.0*i*PI/180));
middleFive[i][1] = y+r*(sin(72.0*i*PI/180));
middleFive[i][2] = z;
} //前面的五边形
glBegin(GL_POLYGON);
for(i=0; i<=5; i++)
{
glVertex3fv(frontFive[i]);
}
glEnd(); //后面的五边形
glBegin(GL_POLYGON);
for(i=0; i<=5; i++)
{
glVertex3fv(backFive[i]);
}
glEnd(); glColor3f(1.0,0.0,0.0);
//前面边上的一圈四边形
glBegin(GL_QUADS);
for(i=0; i<=4; i++)
{
glVertex3fv(frontFive[i]);
glVertex3fv(middleFive[i]);
glVertex3fv(middleFive[(i+1)%5]);
glVertex3fv(frontFive[(i+1)%5]);
}
glEnd(); //后面边上的一圈四边形
glBegin(GL_QUADS);
for(i=0; i<=4; i++)
{
glVertex3fv(middleFive[i]);
glVertex3fv(backFive[i]);
glVertex3fv(backFive[(i+1)%5]);
glVertex3fv(middleFive[(i+1)%5]);
}
glEnd();}
相关文章推荐
- OpenGL绘制图形以及绘制动画(一)
- 编写一个基于OpenGL的程序,绘制一个三角形,并分别绘制这个三角形经旋转、平移、缩放后的结果
- 基于Android的OpenGL—在 GLSurfaceView上绘制三角形和使用投影和相机视图
- opengl圆环的绘制
- OpenGL入门系列- OpenGL_ES 在 本地操作系统窗口上绘制的过程过程
- 每天一个OpenGL程序 第二篇 点的绘制
- OpenGL在VC6.0下 在线程中绘制场景的代码格式
- 从“绘制一个立方体”来看OpenGL的进化过程
- opengl:绘制球体
- 现代OpenGL介绍 第一章:绘制管线
- opengl基础学习专题 (三) 多边形绘制的几种样式
- Android OpenGL学习笔记(二)之----三角形的绘制.
- openGL绘制小汽车
- OpenGL使用顶点数组进行图形的绘制
- vc++中OpenGl的环境配置与简单平面多边形的绘制、着色、旋转
- 如何在Unity中使用OpenGL函数绘制动态曲线图
- openGL学习笔记二、状态管理和绘制几何体【editing】
- Android OpenGLES2.0(五)——绘制立方体
- OpenGL点阵字体绘制终极解决方案!
- Opengl 绘制管线