• 大小: 19.53MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-05
  • 语言: 其他
  • 标签: OpenGL  Sphere  VS2013  

资源简介

这是一个利用VS2013开发的OpenGL小程序,通过自己编写函数实现三维的球体的绘制。主要涉及的知识点有:全屏切换,键盘响应以及场景绘制。里面包含所有的源码以及注解,如果有OpenGL的环境以及相应的库文件是可以直接运行的。如果想自己创建项目进行编写,另外还需要额外配置的是:右键项目名->配置属性->链接器->输入->附加依赖项->添加opengl32.lib glu32.lib。利用OpenGL自编程实现球体源码——网格小demo

资源截图

代码片段和文件信息

#include “stdafx.h“

#pragma warning(disable:4305) //禁止将单精度浮点数转化为双精度浮点数

enum Ref_Plain { XOY YOZ XOZ };

struct Vertex{
float x y z;
};

struct HalfQuarterSphere{
Vertex topVertex;// 1/8圆的穹顶点
Vertex **pVertexs;//其余顶点
int numCircles;//纬线数量
int numLine;//经线数量连接南北两极
float radius;//半径
};

HalfQuarterSphere hqSphere;

void generateHalfQuarterSphere(int numCir/*纬线数*/ int numLin/*经线数*/ HalfQuarterSphere &hqSphere float R){//生成1/8球体所有的顶点
hqSphere.numCircles = numCir;
hqSphere.numLine = numLin;
hqSphere.radius = R;
hqSphere.topVertex.z = R;
hqSphere.topVertex.x = hqSphere.topVertex.y = 0;
//申请内存块
hqSphere.pVertexs = new Vertex*[numCir];
for (int i = 0; i < numCir; i++){
hqSphere.pVertexs[i] = new Vertex[numLin];
}
float cirAngleSegment = HALF_PI / (numLin - 1);//每道纬线的间距
float cirAngleOffset = 0;
float zOffset = 0;
float angleOffset = 0;
float linAngleSegment = HALF_PI / (numCir - 1);//每道相邻经线在XOY平面投影线的夹角

//初始化纬线与XOZ平面的交点
float curR = 0;
int boundLine = numLin - 1;
for (int i = numCir - 1; i >= 0; i--){
zOffset = R*sin(angleOffset);
//初始化当前纬线与始经线,末经线的交点
curR = hqSphere.pVertexs[i][0].x = hqSphere.pVertexs[i][boundLine].y = sqrt(R*R - zOffset*zOffset);
hqSphere.pVertexs[i][0].y = hqSphere.pVertexs[i][boundLine].x = 0;
hqSphere.pVertexs[i][0].z = hqSphere.pVertexs[i][boundLine].z = zOffset;
cirAngleOffset = cirAngleSegment;
//初始化当前纬线与其余经线的交点
for(int j = 1; j < boundLine; j++){
hqSphere.pVertexs[i][j].x = curR*cos(cirAngleOffset);
hqSphere.pVertexs[i][j].y = curR*sin(cirAngleOffset);
hqSphere.pVertexs[i][j].z = zOffset;
cirAngleOffset += cirAngleSegment;
}
angleOffset += linAngleSegment;
}
}

void flipHalfQuarterSphere(HalfQuarterSphere &hqSphere Ref_Plain rp){
switch (rp){
case XOY://Z坐标取反
hqSphere.topVertex.z = -hqSphere.topVertex.z;
for (int i = 0; i < hqSphere.numCircles; i++){
for (int j = 0; j < hqSphere.numLine; j++){
hqSphere.pVertexs[i][j].z = -hqSphere.pVertexs[i][j].z;
}
}
break;
case YOZ://X坐标取反
hqSphere.topVertex.x = -hqSphere.topVertex.x;
for (int i = 0; i < hqSphere.numCircles; i++){
for (int j = 0; j < hqSphere.numLine; j++){
hqSphere.pVertexs[i][j].x = -hqSphere.pVertexs[i][j].x;
}
}
break;
case XOZ://Y坐标取反
hqSphere.topVertex.y = -hqSphere.topVertex.y;
for (int i = 0; i < hqSphere.numCircles; i++){
for (int j = 0; j < hqSphere.numLine; j++){
hqSphere.pVertexs[i][j].y = -hqSphere.pVertexs[i][j].y;
}
}
break;
}
}

void renderHalfQuarterSphere(const HalfQuarterSphere &hqSphere){//绘制1/8球
glBegin(GL_TRIANGLE_FAN);//以穹点为中心画三角形扇
glNormal3f(hqSphere.topVertex.x hqSphere.topVertex.y hqSphere.topVertex.z);
glVertex3f(hqSphere.topVertex.x hqSphere.topVertex.y hqSphere.topVertex.z);
for (int i = 0; i < hqSphere.numLine; i++){
glNormal3f(hqSphere.pVertexs[0][i].x hqSphere.pVertexs[0][i].y hqSphere.pVertexs[0][i].z);
glVertex

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        6354  2019-03-12 18:18  Sphere\Sphere\CGfxOpenGL.cpp
     目录           0  2019-03-12 18:17  Sphere\
     目录           0  2019-03-11 19:50  Sphere\Debug\
     文件       56320  2019-03-12 18:16  Sphere\Debug\Sphere.exe
     文件      531596  2019-03-12 18:16  Sphere\Debug\Sphere.ilk
     文件     1371136  2019-03-12 18:16  Sphere\Debug\Sphere.pdb
     目录           0  2019-03-12 18:17  Sphere\Sphere\
     文件         411  2019-03-11 19:10  Sphere\Sphere\CGfxOpenGL.h
     目录           0  2019-03-12 18:16  Sphere\Sphere\Debug\
     文件       26377  2019-03-12 18:16  Sphere\Sphere\Debug\CGfxOpenGL.obj
     文件        1150  2019-03-11 19:50  Sphere\Sphere\Debug\Sphere.Build.CppClean.log
     文件        1791  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.log
     文件       17888  2019-03-12 15:56  Sphere\Sphere\Debug\Sphere.obj
     文件     7471104  2019-03-11 19:50  Sphere\Sphere\Debug\Sphere.pch
     文件        6776  2019-03-11 19:50  Sphere\Sphere\Debug\Sphere.res
     目录           0  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\
     文件       14676  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\CL.read.1.tlog
     文件        1978  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\CL.write.1.tlog
     文件         161  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\Sphere.lastbuildstate
     文件        2040  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\cl.command.1.tlog
     文件        1552  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\link.command.1.tlog
     文件        3318  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\link.read.1.tlog
     文件         706  2019-03-12 18:16  Sphere\Sphere\Debug\Sphere.tlog\link.write.1.tlog
     文件         464  2019-03-11 19:50  Sphere\Sphere\Debug\Sphere.tlog\rc.command.1.tlog
     文件        2584  2019-03-11 19:50  Sphere\Sphere\Debug\Sphere.tlog\rc.read.1.tlog
     文件         202  2019-03-11 19:50  Sphere\Sphere\Debug\Sphere.tlog\rc.write.1.tlog
     文件      240121  2019-03-11 19:50  Sphere\Sphere\Debug\stdafx.obj
     文件      437248  2019-03-12 18:16  Sphere\Sphere\Debug\vc120.idb
     文件      552960  2019-03-12 18:16  Sphere\Sphere\Debug\vc120.pdb
     文件        2244  2019-03-11 19:09  Sphere\Sphere\ReadMe.txt
     文件         716  2019-03-11 19:09  Sphere\Sphere\Resource.h
............此处省略16个文件信息

评论

共有 条评论