91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 185KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2024-02-05
  • 語言: 其他
  • 標簽: opengl??vs??

資源簡介

計算機圖形學課程設計實驗,OpenGL+VS對obj文件實現三維網格光順操作(用拉普拉斯算法),使用OpenGL類庫對三維模型進行繪制,增加采用鼠標交互方式對三維模型進行旋轉、放縮、平移等操作;包含完整的代碼和我的實驗報告

資源截圖

代碼片段和文件信息

/********************************************************************************
?*?實驗二?三維網格模型光順
?
?*(1)掌握Obj文件的讀入;
?*(2)利用給定的數據結構類,建立讀入網格模型數據結構;
?*(3)利用OpenGL類庫,對三維模型進行繪制;
?*(4)利用OpenGL類庫,增加采用鼠標交互方式對三維模型進行旋轉、放縮、平移等操作;
?*(5)實現Laplacian方法的三維模型光順操作,并觀察三維模型光順過程;

?*********************************************************************************/


#include?“stdlib.h“
#include?
#include?
#include?
#include
#include
#include
using?namespace?std;

#define??GLUT_WHEEL_UP?3???????????//定義滾輪操作??
#define??GLUT_WHEEL_DOWN?4?


int?vertexnum=0;?//記錄點的數量
int?facenum=0;?//記錄面的數量
GLfloat?**vertex;?//存放每個頂點坐標的二維數組
int?**face;?//存放面頂點的二維數組
GLfloat?**facenormal;//存放面的法向量的二維數組
int?*adjfnum;//與每個頂點相鄰的面的數量
int?**adjvertex;//存放與每個頂點相鄰的頂點的數組
GLfloat?**avevertex;//每個頂點的所有相鄰頂點的平均頂點坐標的數組
GLfloat?**newvertex;//通過拉普拉斯算法計算得到的新頂點
GLfloat?**vertexnormal;//存放頂點法向量的二維數組



//獲取點和面的數量??
void?GetLineNum(string?addrstr)?
{
ifstream?infile(addrstr.c_str());?//打開指定文件??
string?sline;//每一行??
int?i?=?0?j?=?0;

while?(getline(infile?sline)&&sline.size()>0)?//從指定文件逐行讀取??
{
if?(sline[0]?==?‘v‘)//點
{
vertexnum++;
}

if?(sline[0]?==?‘f‘)//面
{
facenum++;
}
}

}
//將文件內容讀到數組中去
int?ReadObj(string?addrstr)?
{
string?s1s2;
????GLfloat?v1v2v3;
????int?f1?f2?f3;

vertex?=?new?GLfloat*[vertexnum];?//頂點的二維數組
for?(int?i=0;?i {
vertex[i]?=?new?GLfloat[3];
}

face?=?new??int*[facenum];???//面的二維數組
for?(int?i=0;?i {
face[i]?=?new?int[3];
}


ifstream?infile(addrstr.c_str());//打開指定文件
string?sline;//每一行??
int?jj?=?0?kk?=?0;

??????
while(getline(infilesline)&&sline.size()>0)?//逐行讀取
?{
if(sline[0]==‘v‘)??//存儲點
{
????istringstream?sin(sline);
sin>>s1>>v1>>v2>>v3;
vertex[jj][0]=v1;
vertex[jj][1]=v2;
vertex[jj][2]=v3;
jj++;
}

if?(sline[0]==‘f‘)?//存儲面
{
istringstream?sin(sline);
sin?>>?s2?>>?f1?>>?f2?>>?f3;
face[kk][0]?=?f1;
face[kk][1]?=?f2;
face[kk][2]?=?f3;
kk++;
}

}
return?0;
}

//計算面的法向量
void?GetFaceNormal()
{
facenormal?=?new?GLfloat*[facenum];?//面的法線數組
for?(int?i=0;?i {
facenormal[i]?=?new?GLfloat[3];
}

for?(int?i=0;?i {
GLfloat?axayazbxbybz;??//面上的兩個向量(axayaz)(bxbybz)
GLfloat?cxcycz;??//面的法向量(cxcycz)

ax?=?vertex[face[i][0]-1][0]?-?vertex[face[i][2]-1][0];?
ay?=?vertex[face[i][0]-1][1]?-?vertex[face[i][2]-1][1];
az?=?vertex[face[i][0]-1][2]?-?vertex[face[i][2]-1][2];

bx?=?vertex[face[i][1]-1][0]?-?vertex[face[i][2]-1][0];
by?=?vertex[face[i][1]-1][1]?-?vertex[face[i][2]-1][1];
bz?=?vertex[face[i][1]-1][2]?-?vertex[face[i][2]-1][2];

//(axayaz)(bxbybz)叉乘得到面的法向量(cxcycz)
cx?=?ay*bz?-?az*by;??
cy?=?az*bx?-?ax*bz;
cz?=?ax*by?-?ay*bx;

//將法向量歸一化
GLfloat?len1?=?(GLfloat)(sqrt(cx*cx?+?c

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-04-12?19:16??opengl實現三維模型光順(Laplacian算法)\
?????文件????????9940??2019-04-12?19:16??opengl實現三維模型光順(Laplacian算法)\mesh.cpp
?????文件??????196185??2019-04-12?19:16??opengl實現三維模型光順(Laplacian算法)\實驗報告.docx

評論

共有 條評論