資源簡介
計(jì)算機(jī)圖形學(xué):讀入off、obj文件,并顯示。其中obj文件可顯示光源。
代碼片段和文件信息
//?readOffObj.cpp?:?定義控制臺應(yīng)用程序的入口點(diǎn)。
//
#include?“stdafx.h“
#include???
#include?
#include?
#include?“glut.h“
#include?
#include?
#include?
using?namespace?std;
//typedef?OpenMesh::TriMesh_ArrayKernelT<>?MyMesh;
//鼠標(biāo)交互有關(guān)的
int?mousetate?=?0;?//鼠標(biāo)當(dāng)前的狀態(tài)
GLfloat?Oldx?=?0.0;?//?點(diǎn)擊之前的位置
GLfloat?Oldy?=?0.0;
//與實(shí)現(xiàn)角度大小相關(guān)的參數(shù),只需要兩個就可以完成
float?xRotate?=?0.0f;
float?yRotate?=?0.0f;
int?tx?=?1;
float?ty?=?0.0f;
float?scale?=?1;
//文件讀取有關(guān)的
const?string?file_1?=?“data/output.obj“;
const?string?file_2?=?“data/output.off“;
const?string?file_3?=?“Geometry/cube.off“;
int?currentfile?=?1;
int?v_num;?//記錄點(diǎn)的數(shù)量
int?vn_num;//記錄法線(off:邊數(shù))的數(shù)量
int?f_num;?//記錄面的數(shù)量
GLfloat?**vArr;?//存放點(diǎn)的二維數(shù)組
GLfloat?**vnArr;//存放法線的二維數(shù)組
int?**fvArr;?//存放面頂點(diǎn)的二維數(shù)組
int?**fnArr;?//存放面法線的二維數(shù)組
string?s1;
GLfloat?f1?f2?f3?f4?f5;
GLuint?showFaceList?showWireList;
int?showstate?=?1;
bool?showFace?=?true;
bool?showWire?=?false;
bool?showFlatlines?=?false;
//初始化頂點(diǎn)和面???
void?initGL()
{
glClearColor(0.0?0.0?0.0?0.0);
glClearDepth(2.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);?//用來開啟深度緩沖區(qū)的功能,啟動后OPengl就可以跟蹤Z軸上的像素,那么它只有在前面沒有東西的情況下才會繪制這個像素,在繪制3d時,最好啟用,視覺效果會比較真實(shí)
//?-------------------?Lighting??
glEnable(GL_LIGHTING);?//?如果enbale那么就使用當(dāng)前的光照參數(shù)去推導(dǎo)頂點(diǎn)的顏色
glEnable(GL_LIGHT0);?//第一個光源,而GL_LIGHT1表示第二個光源
//?-------------------?Display?List??
showFaceList?=?glGenLists(1);
showWireList?=?glGenLists(1);
//?繪制flat
if?(currentfile?==?1){
glNewList(showFaceList?GL_COMPILE);
for?(int?i?=?0;?i {
glPolygonMode(GL_FRONT_AND_BACK?GL_FILL);
glBegin(GL_TRIANGLES);
glNormal3f(vnArr[fnArr[i][0]?-?1][0]?vnArr[fnArr[i][0]?-?1][1]?vnArr[fnArr[i][0]?-?1][2]);
glVertex3f(vArr[fvArr[i][0]?-?1][0]?vArr[fvArr[i][0]?-?1][1]?vArr[fvArr[i][0]?-?1][2]);
glNormal3f(vnArr[fnArr[i][1]?-?1][0]?vnArr[fnArr[i][1]?-?1][1]?vnArr[fnArr[i][1]?-?1][2]);
glVertex3f(vArr[fvArr[i][1]?-?1][0]?vArr[fvArr[i][1]?-?1][1]?vArr[fvArr[i][1]?-?1][2]);
glNormal3f(vnArr[fnArr[i][2]?-?1][0]?vnArr[fnArr[i][2]?-?1][1]?vnArr[fnArr[i][2]?-?1][2]);
glVertex3f(vArr[fvArr[i][2]?-?1][0]?vArr[fvArr[i][2]?-?1][1]?vArr[fvArr[i][2]?-?1][2]);
glEnd();
}
glEndList();
}
else?if?(currentfile?==?2){
glNewList(showFaceList?GL_COMPILE);
//glBegin(GL_LINES);
/*c?=??a×b?=?(a.y*b.z-b.y*a.z??b.x*a.z-a.x*b.z???a.x*b.y-b.x*a.y)*/
for?(int?i?=?0;?i {
int?a;
glPolygonMode(GL_FRONT_AND_BACK?GL_FILL);
glBegin(GL_QUADS);
vnArr[fvArr[i][0]][0]?=?(vArr[fvArr[i][1]][1]?-?vArr[fvArr[i][0]][1])*(vArr[fvArr[i][3]][2]?-?vArr[fvArr[i][0]][2])
-?(vArr[fvArr[i][3]][1]?-?vArr[fvArr[i][0]][1])*(vArr[fvArr[i][1]][2]?-?vArr[fvArr[i][0]][2]);
vnArr[fvArr[i][0]][1]?=?(vArr[fvArr[i][3]][0]?-?vArr[fvArr[i][0]][0])*(vArr[fvArr[i][1]][2]?-?vArr[fvArr[i][0]][2])
-?(vArr[fvArr[i][1]][0]?-?vArr[fvArr[i][0]][0])*(vArr[fvArr[i][3]][2]?-
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????143872??2018-06-04?21:18??readOffObj\Debug\readOffObj.exe
?????文件????1150440??2018-06-04?21:18??readOffObj\Debug\readOffObj.ilk
?????文件????1937408??2018-06-04?21:18??readOffObj\Debug\readOffObj.pdb
?????文件????3080192??2018-04-19?17:43??readOffObj\ipch\readoffobj-f0ea83ff\readoffobj-4f310b5e.ipch
?????文件????2646136??2006-03-12?08:47??readOffObj\readOffObj\data\bunny.obj
?????文件?????200149??2018-04-19?15:43??readOffObj\readOffObj\data\cow.obj
?????文件????3506958??2006-03-12?08:47??readOffObj\readOffObj\data\dinosaur.obj
?????文件????2971903??2016-11-06?23:45??readOffObj\readOffObj\data\elepham.obj
?????文件???13898803??2016-11-06?21:30??readOffObj\readOffObj\data\mba1.obj
?????文件??????28348??2015-03-28?16:12??readOffObj\readOffObj\data\monkey.obj
?????文件???????1930??2018-04-19?16:49??readOffObj\readOffObj\data\output.obj
?????文件?????499870??2016-11-06?21:30??readOffObj\readOffObj\data\porsche.obj
?????文件????2116225??2016-11-06?21:30??readOffObj\readOffObj\data\radar.obj
?????文件??????46125??2016-11-06?21:17??readOffObj\readOffObj\data\target.obj
?????文件??????66323??2016-11-07?20:18??readOffObj\readOffObj\data\target2.obj
?????文件??????91538??2016-11-06?21:30??readOffObj\readOffObj\data\teddy.obj
?????文件???????1419??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.log
?????文件?????385496??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.obj
?????文件????1638400??2018-04-19?17:43??readOffObj\readOffObj\Debug\readOffObj.pch
?????文件???????1502??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.tlog\cl.command.1.tlog
?????文件??????23692??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.tlog\CL.read.1.tlog
?????文件???????1150??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.tlog\CL.write.1.tlog
?????文件???????1344??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.tlog\li
?????文件???????3090??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.tlog\li
?????文件????????608??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.tlog\li
?????文件????????168??2018-06-04?21:18??readOffObj\readOffObj\Debug\readOffObj.tlog\readOffObj.lastbuildstate
?????文件??????11052??2018-04-19?17:43??readOffObj\readOffObj\Debug\stdafx.obj
?????文件?????756736??2018-06-04?21:18??readOffObj\readOffObj\Debug\vc120.idb
?????文件?????520192??2018-06-04?21:18??readOffObj\readOffObj\Debug\vc120.pdb
?????文件????1511141??2018-04-02?16:31??readOffObj\readOffObj\Geometry\Arma.off
............此處省略47個文件信息
評論
共有 條評論