资源简介
创建了一个球体类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实现 3DS卫星地球
- 计算机图形学 边界定义的8连通区域
- 实验一 OpenGL 程序设计基础
- 计算机图形学与几何造型导论 英文版
- OpenGL Shading Language 橙宝书 源代码 De
- 计算机图形学基础教程.docx
- 广东工业大学计算机图形学实验.rar
- 天津大学图形学考试资料
- Opengl实现樱花飞舞贴图
- NeHe opengl教程48课全中文pdf,英文pdf,
- opengl实现太阳系动态模型,地球,月
- 计算机图形学 OpenGL实验源码+实验文档
- OpenNI获取三维点云并用OpenGL显示可旋
- glfw-3.2.1源码(需要自行编译)
- 计算机图形学的设计作业。。OpenGl源
- OpenGL绘制3D企鹅
- opengl 实现的机器人行走
- OpenGL 纹理 二重纹理
- Bezier曲面 Coons曲面 B样条曲面绘制(用
- Opengles2.0地球
- 计算机图形学-基于OpenGL的3D迷宫漫游
- 大量Opengl
- Opengl 太阳系
- 用opengl绘制的兔子
- objdata.zip
- 基于OpenGL的描点绘制Bezier曲线
- opengl天空盒的效果源代码
- Qt5版NeHe OpenGL教程6-10
- 基于opengl下的选择物体局部放大
评论
共有 条评论