资源简介
这是一个利用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\li
文件 3318 2019-03-12 18:16 Sphere\Sphere\Debug\Sphere.tlog\li
文件 706 2019-03-12 18:16 Sphere\Sphere\Debug\Sphere.tlog\li
文件 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个文件信息
相关资源
- OpenGL Development Cookbook PDF + vs2015源碼
- OpenGL.Superbible.7th.Edition(pdfandsourceco
- gh0st3.6 win7x64 vs2013可编译运行
- OpenGL着色语言(中文版
- OpenGL编程指南第九版英文
- 计算机图形学OpenGL第三版带完整目录
- VMware Remote Console 10.0.3 for WindowsVMware
- 一个用 opengl 开发的雪花动画
- galil gclib的
- GSL库(64bit)在QT5.50中使用+VS2013编译
- Computer Graphics Using OpenGL (3rd Edition)
- opengl导入3ds模型和场景漫游
- OpenCV实现SfM:双目三维重建
- OpenGL显示任意Stl文件
- xlsLib编译的动态库
- OpenGL计算机图形作业立方体旋转+六个
- 64位geos3.6.2库VS2013编译
- 曾涛地形模型和NeHeOpenGL教程
- Opengl 导入3Dmax制作的.3ds模型 并显示出
- OpenGL游戏程序设计.pdf
- 一个opengl+粒子系统模拟雪效的简单程
- OpenGL ES 2.0 编程指南中英文+源码
- vc助手for vs2013
- 《LearnOpengl CN》中文最新版-2018年11月
- OpenGL三维场景绘制3D模型读取
- OpenGL三维图形系统开发与实用技术.
- opengl绘制的简单机器人 可以实现走路
- opengl三维迷宫
- opengl+粒子系统的降雪模拟增强版
- Visual Studio 2013 SDK
评论
共有 条评论