资源简介
创建了一个球体类Sphere,该类借助于OpenGL来实现球体的绘制,基本思想是将球体的8分之1(第一卦限)部分的顶点生成出来,再通过7次翻转得到其余部分的顶点,以此完成球体的绘制,算法还存在需要优化的地方,欢迎提出宝贵的意见

代码片段和文件信息
// IVTask1.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include “glut.h“
#define WIN_title “信息可视化实验1“
#define WIN_X 50
#define WIN_Y 50
#define WIN_WIDTH 500
#define WIN_HEIGHT 400
#define ROTATE_DELTA 1.0
#define TRANSLATE_DELTA 1.0
#define AXIS_RENDER_LENGTH 1000.0
const float HALF_PI=acos(0.0);
enum Ref_Plain {XOYYOZXOZ};//翻转参照面枚举量
GLfloat prexpreyspinx(0)spiny(0)scaleFactor=1.0;
bool isDrag=false;
struct Vertex
{
float xyz;
//float vxvyvz;
};
struct HalfQuarterSphere
{
Vertex topVertex;//1/8圆的穹顶点
Vertex ** pVertexs;//其余顶点
int numCircle;//纬线数量
int numLine;//经线数量
float radius;//半径
};
HalfQuarterSphere hqSphere;
struct Position
{
float xy;
};
void printHalfQuarterSphere(const HalfQuarterSphere& hqSphere)
{
printf(“(%.2f %.2f %.2f)\n“hqSphere.topVertex.xhqSphere.topVertex.yhqSphere.topVertex.z);
for(int i=0;i {
for(int j=0;j {
printf(“[%d][%d]=(%.2f %.2f %.2f) “ijhqSphere.pVertexs[i][j].xhqSphere.pVertexs[i][j].yhqSphere.pVertexs[i][j].z);
}
printf(“\n“);
}
}
void flipHalfQuarterSphere(HalfQuarterSphere & hqSphereRef_Plain rp)
{
switch(rp)
{
case XOY:
hqSphere.topVertex.z=-hqSphere.topVertex.z;
for(int i=0;i {
for(int j=0;j {
hqSphere.pVertexs[i][j].z=-hqSphere.pVertexs[i][j].z;
}
}
break;
case YOZ:
hqSphere.topVertex.x=-hqSphere.topVertex.x;
for(int i=0;i {
for(int j=0;j {
hqSphere.pVertexs[i][j].x=-hqSphere.pVertexs[i][j].x;
}
}
break;
case XOZ:
hqSphere.topVertex.y=-hqSphere.topVertex.y;
for(int i=0;i {
for(int j=0;j {
hqSphere.pVertexs[i][j].y=-hqSphere.pVertexs[i][j].y;
}
}
break;
}
}
void generateHalfQuarterSphere(int numCir/*纬线数*/int numLin/*经线数*/HalfQuarterSphere& hqSpherefloat R)//生成第一卦限的1/8个球体
{
hqSphere.numCircle=numCir;
hqSphere.numLine=numLin;
hqSphere.radius=R;
hqSphere.topVertex.z=R;
hqSphere.topVertex.x=hqSphere.topVertex.y=0;
//hqSphere.topVertex.vx=hqSphere.topVertex.vy=0;
//hqSphere.topVertex.vz=1;
//申请内存块
hqSphere.pVertexs=new Vertex*[numCir];
for(int i=0;i {
hqSphere.pVertexs[i]=new Vertex[numLin];
}
float cirAngleSegment=HALF_PI/numCir;//每道纬线的间距
float cirAngleOffset=0;
float zOffset=0;
float angleOffset=0;
float linAngleSegment=HALF_PI/(numLin-1);//每道相邻经线在XOY平面投影线的夹角
//初始化纬线与XOZ平面的交点
float curR=0;
int boundLin=numLin-1;
for(int i=numCir-1;i>=0;i--)
{
zOffset=R*sin(cirAngleOffset);
//初始化当前纬线与首经线、末经线上的交点
curR=hqSphere.pVertexs[i][0].x=hqSphere.pVertexs[i][boundLin].y=sqrt(R*R-zOffset*zOffset);
hqSphere.pVertexs[i][0].y=hqSphere.pVertexs[i][boundLin].x=0;
hqSphere.pVertexs[i][0].z=hqSphere.pVertexs[i][boundLin].z=zOffset;
//hqSphere.pVertex
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 41472 2012-09-16 10:16 IVTask1\Debug\IVTask1.exe
文件 494216 2012-09-16 10:16 IVTask1\Debug\IVTask1.ilk
文件 535552 2012-09-16 10:16 IVTask1\Debug\IVTask1.pdb
文件 2359296 2012-09-16 10:36 IVTask1\ipch\ivtask1-c161c19e\ivtask1-b9462aaf.ipch
文件 1754 2012-09-16 10:16 IVTask1\IVTask1\Debug\cl.command.1.tlog
文件 4294 2012-09-16 10:16 IVTask1\IVTask1\Debug\CL.read.1.tlog
文件 1314 2012-09-16 10:16 IVTask1\IVTask1\Debug\CL.write.1.tlog
文件 406 2012-09-13 20:48 IVTask1\IVTask1\Debug\IVTask1.exe.em
文件 472 2012-09-13 20:48 IVTask1\IVTask1\Debug\IVTask1.exe.em
文件 381 2012-09-16 10:16 IVTask1\IVTask1\Debug\IVTask1.exe.intermediate.manifest
文件 102 2012-09-16 10:16 IVTask1\IVTask1\Debug\IVTask1.lastbuildstate
文件 2437 2012-09-16 10:16 IVTask1\IVTask1\Debug\IVTask1.log
文件 32080 2012-09-16 10:16 IVTask1\IVTask1\Debug\IVTask1.obj
文件 1179648 2012-09-13 20:48 IVTask1\IVTask1\Debug\IVTask1.pch
文件 204 2012-09-13 20:48 IVTask1\IVTask1\Debug\IVTask1_manifest.rc
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
文件 2 2012-09-16 10:16 IVTask1\IVTask1\Debug\li
............此处省略55个文件信息
相关资源
- 计算机图形学 边填充算法实现代码
- OpenGL参考手册
- 计算机图形学课设 画板
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 简易绘图程序(计算机图形学课程设
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 图形学集成程序dda、中点算法、多边
- 计算机图形实验(哈尔滨工程大学)
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 计算机图形学-全.rar
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- 警察抓小偷游戏 x86版
评论
共有 条评论