資源簡(jiǎn)介
這是一個(gè)利用VS2013開發(fā)的OpenGL小程序,通過自己編寫函數(shù)實(shí)現(xiàn)三維的球體的繪制。主要涉及的知識(shí)點(diǎn)有:全屏切換,鍵盤響應(yīng)以及場(chǎng)景繪制。里面包含所有的源碼以及注解,如果有OpenGL的環(huán)境以及相應(yīng)的庫文件是可以直接運(yùn)行的。如果想自己創(chuàng)建項(xiàng)目進(jìn)行編寫,另外還需要額外配置的是:右鍵項(xiàng)目名->配置屬性->鏈接器->輸入->附加依賴項(xiàng)->添加opengl32.lib glu32.lib。利用OpenGL自編程實(shí)現(xiàn)球體源碼——網(wǎng)格小demo
代碼片段和文件信息
#include?“stdafx.h“
#pragma?warning(disable:4305)?//禁止將單精度浮點(diǎn)數(shù)轉(zhuǎn)化為雙精度浮點(diǎn)數(shù)
enum?Ref_Plain?{?XOY?YOZ?XOZ?};
struct?Vertex{
float?x?y?z;
};
struct?HalfQuarterSphere{
Vertex?topVertex;//?1/8圓的穹頂點(diǎn)
Vertex?**pVertexs;//其余頂點(diǎn)
int?numCircles;//緯線數(shù)量
int?numLine;//經(jīng)線數(shù)量連接南北兩極
float?radius;//半徑
};
HalfQuarterSphere?hqSphere;
void?generateHalfQuarterSphere(int?numCir/*緯線數(shù)*/?int?numLin/*經(jīng)線數(shù)*/?HalfQuarterSphere?&hqSphere?float?R){//生成1/8球體所有的頂點(diǎn)
hqSphere.numCircles?=?numCir;
hqSphere.numLine?=?numLin;
hqSphere.radius?=?R;
hqSphere.topVertex.z?=?R;
hqSphere.topVertex.x?=?hqSphere.topVertex.y?=?0;
//申請(qǐng)內(nèi)存塊
hqSphere.pVertexs?=?new?Vertex*[numCir];
for?(int?i?=?0;?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);//每道相鄰經(jīng)線在XOY平面投影線的夾角
//初始化緯線與XOZ平面的交點(diǎn)
float?curR?=?0;
int?boundLine?=?numLin?-?1;
for?(int?i?=?numCir?-?1;?i?>=?0;?i--){
zOffset?=?R*sin(angleOffset);
//初始化當(dāng)前緯線與始經(jīng)線,末經(jīng)線的交點(diǎn)
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;
//初始化當(dāng)前緯線與其余經(jīng)線的交點(diǎn)
for(int?j?=?1;?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坐標(biāo)取反
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://X坐標(biāo)取反
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://Y坐標(biāo)取反
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?renderHalfQuarterSphere(const?HalfQuarterSphere?&hqSphere){//繪制1/8球
glBegin(GL_TRIANGLE_FAN);//以穹點(diǎn)為中心畫三角形扇
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? glNormal3f(hqSphere.pVertexs[0][i].x?hqSphere.pVertexs[0][i].y?hqSphere.pVertexs[0][i].z);
glVertex
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????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個(gè)文件信息
評(píng)論
共有 條評(píng)論