资源简介
绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边形带)构成的球体,注意球体绘制与球体划分的区别。
可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。
可以通过改变glPolygonMode,切换是否填充所绘制的基本体素。
利用函数glutGet(GLUT_ELAPSED_TIME)(returns the time in milliseconds since glutInit or the first invocation of the function)统计绘制时间
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#define PI 3.1415926
#define GLfloat float
#define GLdouble double
#define GLint int
double c=PI/180.0;
double radius=100.0;//球半径
int w=500.0h=500.0;//窗口的宽和高
int angleX=10angleY=10;//角度
double oldcenterxoldcenterycenterxcenterycenterz;
int num=1;
int fill_mode=GL_LINE;//显示面只用线表示
double step=10;
long timeStart=0;
time_t t;
int style=GL_QUAD_STRIP;//四边形带
int color;
color=1;
float thetaphirphithetarphir20;
float xyz;
double c80;
int i;
void drawSphere(int centerxint centeryint centerz){
//选择当前操作的矩阵。GL_MODELVIEW为模型视图矩阵
glMatrixMode(GL_MODELVIEW);
//将当前矩阵设置为4乘4单位矩阵
glLoadIdentity();
//平移变换
glTranslated(centerxcenterycenterz);
//旋转变换从(0,0,0)到(0,1,0)逆时针方向旋转45°
glRotated(45010);
glRotated(angleY100);
glRotated(angleX001);
c80=c*80;
//定义视口,前两个0为左下角坐标,w和h为视口的宽度和高度
glViewport(00(GLdouble)w(GLdouble)h);
for(phi=-90;phi<=90;phi+=step){
phir = c*phi;
phir20 = c*(phi+20);
//glPolygonMode函数用于控制多边形的显示方式。
glPolygonMode(GL_FRONTfill_mode);//GL_FRONT表示显示模式将适用于物体的前向面(也就是物体能看到的面)
glPolygonMode(GL_BACKfill_mode);//GL_FILL表示显示面(GL_POINT表示只显示顶点GL_LINE表示显示线段)
//设置CCW方向为“正面”,
glFrontFace(GL_CCW);
glBegin(style);
for(theta=-180;theta<=180;theta+=step){
thetar = c*theta;
x=radius*sin(thetar)*cos(phir);
y=radius*cos(thetar)*cos(phir);
z=radius*sin(phir);
//随机分配颜色。
if(color)
glColor3f((rand()%101*1.0)/100(rand()%101*1.0)/100(rand()%101*1.0)/100);
glVertex3d(xyz);
x=radius*sin(thetar)*cos(phir20);
y=radius*cos(thetar)*cos(phir20);
z=radius*sin(phir20);
glVertex3d(xyz);
}
glEnd();
}
if(style==GL_TRIANGLES || style==GL_QUADS){
for(phi=-90;phi<=90;phi+=step){
phir = c*phi;
glPolygonMode(GL_FRONTfill_mode);
glPolygonMode(GL_BACKfill_mode);
glFrontFace(GL_CCW);
glBegin(GL_POLYGON);
for(theta=-180;theta<=180;theta+=step){
thetar = c*theta;
x=radius*sin(thetar)*cos(phir);
y=radius*cos(thetar)*cos(phir);
z=radius*sin(phir);
//随机分配颜色。
if(color)
glColor3f((rand()%101*1.0)/100(rand()%101*1.0)/100(rand()%101*1.0)/100);
glVertex3d(xyz);
}
glEnd();
}
}
glPolygonMode(GL_FRONTfill_mode);
glPolygonMode(GL_BACKfill_mode);
glFrontFace(GL_CCW);
glBegin(GL_TRIANGLE_FAN);//画扇形
glVertex3d(00radius);
z = radius*sin(c80);
for(theta=-180;theta<=180;theta+=step){
thetar = c*theta;
x=radius*sin(thetar)*cos(c80);
y=radius*cos(thetar)*cos(c80);
if(color)
glColor3f((rand()%101*1.0)/100(rand()%101*1.0)/100(rand()%101*1.0)/100);
glVertex3d(xyz);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glVertex3d(00-radius);
z=-radius*sin(c80);
for(theta=-180.0;theta<=180.0;theta+=step){
thetar = c*theta;
x=r
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 221230 2010-11-08 11:26 lab1\Debug\lab1.exe
文件 266756 2010-11-08 11:26 lab1\Debug\lab1.ilk
文件 329808 2010-11-08 11:26 lab1\Debug\lab1.pch
文件 418816 2010-11-08 11:26 lab1\Debug\lab1.pdb
文件 28714 2010-11-08 11:26 lab1\Debug\ss.obj
文件 33792 2010-11-25 19:16 lab1\Debug\vc60.idb
文件 45056 2010-11-08 11:26 lab1\Debug\vc60.pdb
文件 4256 2010-11-08 11:26 lab1\lab1.dsp
文件 533 2010-11-08 11:25 lab1\lab1.dsw
文件 41984 2010-11-25 19:16 lab1\lab1.ncb
文件 53760 2010-11-25 19:16 lab1\lab1.opt
文件 1722 2010-11-08 11:26 lab1\lab1.plg
文件 8490 2010-11-08 11:26 lab1\ss.c
目录 0 2010-11-30 21:02 lab1\Debug
目录 0 2010-11-30 21:02 lab1
----------- --------- ---------- ----- ----
1454917 15
相关资源
- 戴森-施温格方程在有限球体积中的手
- VS2012OpenGL配置所需要的全部libdllh文件
- 易语言GDI三维球体源码
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
- OpenGL场景漫游
- 磁法勘探球体异常体正演程序源码
- 用opengl实现的太阳系模型
- OpenGL 3D贪吃蛇程序,很小
- OpenGL爆炸碎片化效果 源码
- OpenGL三茶壶三光源光源绕着茶壶旋转
- 10个OpenGL的源码
- vc写的一个游戏里面三维场景漫游
- 年会抽奖程序,3D 球体抽奖,支持奖
- OpenGL实现的简单游戏引擎
- OpenGL游戏程序设计源码
- glew最新版本glew1.11.0
- 论文研究 - 胶莱盆地白垩纪红层中暗
- CSS3制作3D旋转科幻球体动画特效
评论
共有 条评论