圖形學(xué)讀取立方體、兔子、八字三維模型代碼及截圖_第1頁
圖形學(xué)讀取立方體、兔子、八字三維模型代碼及截圖_第2頁
圖形學(xué)讀取立方體、兔子、八字三維模型代碼及截圖_第3頁
圖形學(xué)讀取立方體、兔子、八字三維模型代碼及截圖_第4頁
圖形學(xué)讀取立方體、兔子、八字三維模型代碼及截圖_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、#include <stdlib.h>#include <GL/glut.h>#include <stdio.h>#include <iostream>#include <string>#include <fstream>#include <sstream>#include<cmath>using namespace std;int v_num = 0; /記錄點(diǎn)的數(shù)量int f_num = 0; /記錄面的數(shù)量int vn_num = 0;/記錄法向量的數(shù)量int vt_num = 0;GLflo

2、at *vArr; /存放點(diǎn)的二維數(shù)組int *fvArr; /存放面頂點(diǎn)的二維數(shù)組int *fnArr;/存放面法向量的二維數(shù)組int *ftArr;GLfloat *vtArr;GLfloat *vnArr;/存放法向量的二維數(shù)組string s1, s2, s3, s4;GLfloat f2, f3, f4;void getLineNum(string addrstr) /獲取點(diǎn)和面的數(shù)量ifstream infile(addrstr.c_str(); /打開指定文件string sline;/每一行int i = 0, j = 0;while (getline(infile, slin

3、e) /從指定文件逐行讀取if (sline0 = 'v')if (sline1 = 'n')vn_num+;else if(sline1 = 't')vt_num+;elsev_num+;if (sline0 = 'f')f_num+;int readfile(string addrstr) /將文件內(nèi)容讀到數(shù)組中去/getLineNum(addrstr);/new二維數(shù)組vArr = new GLfloat*v_num;for (int i = 0; i<v_num; i+)vArri = new GLfloat3;vn

4、Arr = new GLfloat*vn_num;for (int i = 0; i<vn_num; i+)vnArri = new GLfloat3;vtArr = new GLfloat*vt_num;for (int i = 0; i<vt_num; i+)vtArri = new GLfloat2;fvArr = new int*f_num;fnArr = new int*f_num;ftArr = new int*f_num;for (int i = 0; i<f_num; i+)fvArri = new int3;fnArri = new int3;ftArri

5、= new int2;ifstream infile(addrstr.c_str();string sline;/每一行int ii = 0, jj = 0, kk = 0, mm = 0;while (getline(infile, sline)if (sline0 = 'v')if (sline1 = 'n')/vnistringstream sin(sline);sin >> s1 >> f2 >> f3 >> f4;vnArrii0 = f2;vnArrii1 = f3;vnArrii2 = f4;ii+;

6、else if (sline1 = 't')istringstream sin(sline);sin >> s1 >> f2 >> f3 ;cout << f2 << f3;vtArrmm0 = f2;vtArrmm1 = f3;/vtArrmm2 = f4;mm+;else/vistringstream sin(sline);sin >> s1 >> f2 >> f3 >> f4;vArrjj0 = f2;vArrjj1 = f3;vArrjj2 = f4;jj+;if

7、 (sline0 = 'f') /存儲面istringstream in(sline);GLfloat a;in >> s1;/去掉fint i, k;for (i = 0; i < 3; i+)in >> s1;cout << s1 << endl;/取出第一個(gè)頂點(diǎn)和法線索引a = 0;/int len = sizeof(s1);int len = s1.length();cout << len;for (int m = 0; m <len; m+)if (s1m != '/')a = a

8、 * 10 + (s1m - 48);fvArrkki = a;elsem+;if (m <=3)if (s1m != '/')a = a * 10 + (s1m - 48);ftArrkki = a;elsem+;a = a * 10 + (s1m - 48);fnArrkki = a;else/m+;a = a * 10 + (s1m - 48);fnArrkki = a;/for (k = 0; s1k != '/' k+)/a = a * 10 + (s1k - 48);/fvArrkki = a;/a = 0;/for (k = k + 2; s

9、1k; k+)/a = a * 10 + (s1k - 48);/fnArrkki = a;kk+;return 0;void init(void)getLineNum("Eight.obj");readfile("Eight.obj");GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat mat_shininess = 50.0 ;/材料的鏡面指數(shù),其值越大越精細(xì)GLfloat light_position = 1.0, 1.0f, 1.0, 0.0 ;GLfloat white_light = 1.0

10、, 1.0, 1.0, 1.0 ;GLfloat lmodel_ambient = 0.1, 0.1, 0.1, 1.0 ;glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_SMOOTH);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glLightfv(GL_LIGHT0, GL_POSITION, light_position);/光源位置glLightfv(GL_LIGHT0, GL_

11、DIFFUSE, white_light);/漫反射光源glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);/鏡面反射光源glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);/環(huán)境光源glEnable(GL_LIGHTING);/啟動(dòng)光照glEnable(GL_LIGHT0);/啟用0度光源glEnable(GL_DEPTH_TEST);/啟動(dòng)深度測試/*glShadeModel(GL_SMOOTH);/ Enable Smooth ShadingglClearColor(0.0f, 0.0f,

12、 0.0f, 0.5f);/ 黑色背景glClearDepth(1.0f);/ 深度緩沖區(qū)設(shè)置glEnable(GL_DEPTH_TEST);/ 允許深度測試glDepthFunc(GL_LEQUAL);/ 定義深度測試類型glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);/ Really Nice Perspective Calculation*/void display(void)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/gluLookAt(-2.0, -2.0, -2.0, 0

13、.0, 0.0, 0.0, 0.0, 1.0, 0.0); /設(shè)置觀察的位置glTranslatef(1.0, -0.0, -8.0);glScalef(0.1, 0.1, 0.1);for (int i = 0; i<f_num; i+)glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_TRIANGLES);if (vn_num = 0)/glNormal3f(vnArrfnArri0 - 10, vnArrfnArri0 - 11, vnArrfnArri0 - 12);glVertex3f(vArrfvArri0 - 10,

14、 vArrfvArri0 - 11, vArrfvArri0 - 12);/glNormal3f(vnArrfnArri1 - 10, vnArrfnArri1 - 11, vnArrfnArri1 - 12);glVertex3f(vArrfvArri1 - 10, vArrfvArri1 - 11, vArrfvArri1 - 12);/glNormal3f(vnArrfnArri2 - 10, vnArrfnArri2 - 11, vnArrfnArri2 - 12);glVertex3f(vArrfvArri2 - 10, vArrfvArri2 - 11, vArrfvArri2 -

15、 12);elseglTexCoord2f(vtArrftArri0 - 10, vtArrftArri0 - 11);/glNormal3f(vnArrfnArri0 - 10, vnArrfnArri0 - 11, vnArrfnArri0 - 12);glVertex3f(vArrfvArri0 - 10, vArrfvArri0 - 11, vArrfvArri0 - 12);glTexCoord2f(vtArrftArri1 - 10, vtArrftArri1 - 11);/glNormal3f(vnArrfnArri1 - 10, vnArrfnArri1 - 11, vnArr

16、fnArri1 - 12);glVertex3f(vArrfvArri1 - 10, vArrfvArri1 - 11, vArrfvArri1 - 12);glTexCoord2f(vtArrftArri2 - 10, vtArrftArri2 - 11);/glNormal3f(vnArrfnArri2 - 10, vnArrfnArri2 - 11, vnArrfnArri2 - 12);glVertex3f(vArrfvArri2 - 10, vArrfvArri2 - 11, vArrfvArri2 - 12);glEnd();glFlush();/強(qiáng)制繪圖void reshape(

17、int w, int h)glViewport(0, 0, (GLsizei)w, (GLsizei)h); /視口設(shè)置glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)/描繪了兩種不同情況下的平行修剪空間glOrtho(-1.5, 1.5, -1.5 * (GLfloat)h / (GLfloat)w, 1.5 * (GLfloat)h / (GLfloat)w, -10.0, 10.0);elseglOrtho(-1.5*(GLfloat)w / (GLfloat)h, 1.5*(GLfloat)w / (GLfloat)

18、h, -1.5, 1.5, -10.0, 10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();int main(int argc, char *argv)glutInit(&argc, argv);/對GLUT進(jìn)行初始化glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);/設(shè)置顯示方式,單緩沖、RGB顏色glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100); /glutCreateWindow(argv0);glutCreateWindow("Test");init();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論