这是一个利用VS2013开发的OpenGL小程序,通过自己编写函数实现三维的球体的绘制。主要涉及的知识点有:全屏切换,键盘响应以及场景绘制。里面包含所有的源码以及注解,如果有OpenGL的环境以及相应的库文件是可以直接运行的。如果想自己创建项目进行编写,另外还需要额外配置的是:右键项目名->配置属性->链接器->输入->附加依赖项->添加opengl32.lib glu32.lib。利用OpenGL自编程实现球体源码——网格小demo
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6354 2019-03-12 18:18 SphereSphereCGfxOpenGL.cpp
目录 0 2019-03-12 18:17 Sphere
目录 0 2019-03-11 19:50 SphereDebug
文件 56320 2019-03-12 18:16 SphereDebugSphere.exe
文件 531596 2019-03-12 18:16 SphereDebugSphere.ilk
文件 1371136 2019-03-12 18:16 SphereDebugSphere.pdb
目录 0 2019-03-12 18:17 SphereSphere
文件 411 2019-03-11 19:10 SphereSphereCGfxOpenGL.h
目录 0 2019-03-12 18:16 SphereSphereDebug
文件 26377 2019-03-12 18:16 SphereSphereDebugCGfxOpenGL.obj
文件 1150 2019-03-11 19:50 SphereSphereDebugSphere.Build.CppClean.log
文件 1791 2019-03-12 18:16 SphereSphereDebugSphere.log
文件 17888 2019-03-12 15:56 SphereSphereDebugSphere.obj
文件 7471104 2019-03-11 19:50 SphereSphereDebugSphere.pch
文件 6776 2019-03-11 19:50 SphereSphereDebugSphere.res
目录 0 2019-03-12 18:16 SphereSphereDebugSphere.tlog
文件 14676 2019-03-12 18:16 SphereSphereDebugSphere.tlogCL.read.1.tlog
文件 1978 2019-03-12 18:16 SphereSphereDebugSphere.tlogCL.write.1.tlog
文件 161 2019-03-12 18:16 SphereSphereDebugSphere.tlogSphere.lastbuildstate
文件 2040 2019-03-12 18:16 SphereSphereDebugSphere.tlogcl.command.1.tlog
文件 1552 2019-03-12 18:16 SphereSphereDebugSphere.tloglink.command.1.tlog
文件 3318 2019-03-12 18:16 SphereSphereDebugSphere.tloglink.read.1.tlog
文件 706 2019-03-12 18:16 SphereSphereDebugSphere.tloglink.write.1.tlog
文件 464 2019-03-11 19:50 SphereSphereDebugSphere.tlog
c.command.1.tlog
文件 2584 2019-03-11 19:50 SphereSphereDebugSphere.tlog
c.read.1.tlog
文件 202 2019-03-11 19:50 SphereSphereDebugSphere.tlog
c.write.1.tlog
文件 240121 2019-03-11 19:50 SphereSphereDebugstdafx.obj
文件 437248 2019-03-12 18:16 SphereSphereDebugvc120.idb
文件 552960 2019-03-12 18:16 SphereSphereDebugvc120.pdb
文件 2244 2019-03-11 19:09 SphereSphereReadMe.txt
文件 716 2019-03-11 19:09 SphereSphereResource.h
............此处省略16个文件信息
#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 SphereSphereCGfxOpenGL.cpp
目录 0 2019-03-12 18:17 Sphere
目录 0 2019-03-11 19:50 SphereDebug
文件 56320 2019-03-12 18:16 SphereDebugSphere.exe
文件 531596 2019-03-12 18:16 SphereDebugSphere.ilk
文件 1371136 2019-03-12 18:16 SphereDebugSphere.pdb
目录 0 2019-03-12 18:17 SphereSphere
文件 411 2019-03-11 19:10 SphereSphereCGfxOpenGL.h
目录 0 2019-03-12 18:16 SphereSphereDebug
文件 26377 2019-03-12 18:16 SphereSphereDebugCGfxOpenGL.obj
文件 1150 2019-03-11 19:50 SphereSphereDebugSphere.Build.CppClean.log
文件 1791 2019-03-12 18:16 SphereSphereDebugSphere.log
文件 17888 2019-03-12 15:56 SphereSphereDebugSphere.obj
文件 7471104 2019-03-11 19:50 SphereSphereDebugSphere.pch
文件 6776 2019-03-11 19:50 SphereSphereDebugSphere.res
目录 0 2019-03-12 18:16 SphereSphereDebugSphere.tlog
文件 14676 2019-03-12 18:16 SphereSphereDebugSphere.tlogCL.read.1.tlog
文件 1978 2019-03-12 18:16 SphereSphereDebugSphere.tlogCL.write.1.tlog
文件 161 2019-03-12 18:16 SphereSphereDebugSphere.tlogSphere.lastbuildstate
文件 2040 2019-03-12 18:16 SphereSphereDebugSphere.tlogcl.command.1.tlog
文件 1552 2019-03-12 18:16 SphereSphereDebugSphere.tlogli
文件 3318 2019-03-12 18:16 SphereSphereDebugSphere.tlogli
文件 706 2019-03-12 18:16 SphereSphereDebugSphere.tlogli
文件 464 2019-03-11 19:50 SphereSphereDebugSphere.tlog
c.command.1.tlog
文件 2584 2019-03-11 19:50 SphereSphereDebugSphere.tlog
c.read.1.tlog
文件 202 2019-03-11 19:50 SphereSphereDebugSphere.tlog
c.write.1.tlog
文件 240121 2019-03-11 19:50 SphereSphereDebugstdafx.obj
文件 437248 2019-03-12 18:16 SphereSphereDebugvc120.idb
文件 552960 2019-03-12 18:16 SphereSphereDebugvc120.pdb
文件 2244 2019-03-11 19:09 SphereSphereReadMe.txt
文件 716 2019-03-11 19:09 SphereSphereResource.h
............此处省略16个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)