资源简介

创建了一个球体类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.embed.manifest

     文件        472  2012-09-13 20:48  IVTask1\IVTask1\Debug\IVTask1.exe.embed.manifest.res

     文件        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\link-cvtres.read.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link-cvtres.write.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.2428-cvtres.read.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.2428-cvtres.write.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.2428.read.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.2428.write.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.3508-cvtres.read.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.3508-cvtres.write.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.3508.read.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.3508.write.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.4500-cvtres.read.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.4500-cvtres.write.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.4500.read.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.4500.write.1.tlog

     文件          2  2012-09-16 10:16  IVTask1\IVTask1\Debug\link.4820-cvtres.read.1.tlog

............此处省略55个文件信息

评论

共有 条评论