圖形學程式設計學習日誌01
1.obj檔案的讀取
到這裡就已經把整個檔案讀取成功了,下一步應該是要用opengl把整個模型檔案描繪出來。#include<sstream> #include <string> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <GL/glut.h> #include <iostream> #include <fstream> #include <GL/GLAUX.H> #pragma comment(lib, "glew32.lib") #pragma comment(lib,"glaux.lib ") using namespace std; float eye[3] = {0,0,0}; float degreex=0; float degreey=0; float degreez=0; string s1; GLfloat f2,f3,f4; int v_num=0; //記錄點的數量 int vn_num=0;//記錄法線的數量 int f_num=0; //記錄面的數量 GLfloat **vArr; //存放點的二維陣列 GLfloat **vnArr;//存放法線的二維陣列 int **fvArr; //存放面頂點的二維陣列 int **fnArr; //存放面法線的二維陣列 //int v_num=382; //int vn_num=382; //int f_num=760; //GLfloat vArr[382][3]; //GLfloat vnArr[382][3]; // //int fvArr[760][3]; //int fnArr[760][3]; int counta(string addr)//計數函式 { ifstream filea(addr.c_str()); cout << "讀取檔案"<<endl; if (!filea) { cout << "讀取檔案失敗"; return -1; } string strline; while(getline(filea,strline)) { if(strline[0]=='v') { if(strline[1]=='n')//vn得到法線的數目 {vn_num++; } if(strline[1]==' ')//v得到頂點的數目 {v_num++; } } if (strline[0]=='f') //得到面的數目 {f_num++; } } //cout<<v_num<<endl<<vn_num<<endl<<f_num<<endl; int i=0; vArr=new GLfloat*[v_num];//開闢存放頂點的空間 for (int i=0;i<v_num;i++) { vArr[i]=new GLfloat[3]; } vnArr=new GLfloat*[vn_num];//開闢存放法線的空間 for (i=0;i<vn_num;i++) { vnArr[i]=new GLfloat[3]; } fvArr=new int*[f_num];//面 fnArr=new int*[f_num]; for (i=0;i<f_num;i++) { fvArr[i]=new int[3]; fnArr[i]=new int[3]; } return 0; } int reada(string addr) //讀取檔案內容並存儲各個陣列 { ifstream filea(addr.c_str()); cout << "load……"<<endl; if (!filea) { cout << "讀取檔案失敗"; return -1; } string strline; int ii=0,jj=0,kk=0; while(getline(filea,strline)) { if(strline[0]=='v') { if(strline[1]=='n')//vn { istringstream strin(strline); strin>>s1>>f2>>f3>>f4; vnArr[ii][0]=f2; vnArr[ii][1]=f3; vnArr[ii][2]=f4; ii++; } if(strline[1]==' ')//v { istringstream strin(strline); strin>>s1>>f2>>f3>>f4; vArr[jj][0]=f2; vArr[jj][1]=f3; vArr[jj][2]=f4; jj++; //cout<<"good"; } } if (strline[0]=='f') //讀取面 { istringstream in(strline); GLfloat a; in>>s1;//去掉字首f int i,k; for(i=0;i<3;i++) { in>>s1; // cout<<s1<<endl; //取得頂點索引和法線索引 a=0; for(k=0;s1[k]!='/';k++) { //cout<<s1[k]<<endl; a=a*10+(s1[k]-48); // cout<<a<<endl; } fvArr[kk][i]=a; k++; for(;s1[k]!='/';k++) {; } a=0; for(k=k+1;s1[k];k++) { a=a*10+(s1[k]-48); } fnArr[kk][i]=a; } kk++; } } filea.close(); return 0; }
相關推薦
圖形學程式設計學習日誌01
1.obj檔案的讀取 #include<sstream> #include <string> #include <stdio.h> #include <stdlib.h> #include <math.h> #i
C#程式設計學習(01):北斗時轉日曆時的小程式
需求說明:給定nav格式的北斗時檔案從中提取出北斗周和周內秒資訊,將該資訊轉化為日曆時 軟體介面: 設計流程: 1. 變數定義: 批量處理: 開啟,btn_openFile; 轉換, btn_timeTrans 單一轉換:北斗周對應文字框,txb_bdsWeek;周內秒對應
使用Scratch2和ROS進行機器人圖形化程式設計學習
使用Scratch2和ROS進行機器人程式設計學習(適用於中小學機器人程式設計Scratch和ROS)參考JdeRobot的一篇詳細介紹,就可以實現上述的功能,需要安裝Scratch2、ROS Kinetic、Gazebo 7、JdeRobot、Python2.7等。通過將S
html5學習日誌01
html5 W3C標準 W3C World Wide Web Consortium(全球資訊網聯盟) 成立於1994年,Web技術領域最權威和具影響力的國際中立性技術標準機構 http://www.w3.org/ http://www.chinaw3c.org/ W3
servlet學習日誌01
javaweb web開發是基於請求和響應的: 請求:瀏覽器(客戶端)向伺服器傳送資訊 響應:伺服器向瀏覽器回送資訊 請求和響應是成對出現的。web資源分類 所謂web資源即放在Internet網上供外界訪問的檔案或程式,又根據它們呈現的效果及原理不同,將它們劃分為靜態資
我的程式設計學習日誌(15)--C/C++實現輸出漢字拼音的首字母
說實話,寫的程式越多,就越討厭漢字,因為漢字在計算機裡的編碼不統一,不像英文字母那樣一個ascll碼就解決。 就比如做的那個地鐵導航,還有flppy bird程式,當時就被怎麼查漢字還有漢字編碼轉換問
蘇嵌學習日誌01
姓名:高翔 日期:2018.9.3 今日學習任務:安裝實訓環境,學習c語言中指標陣列等概念。 今日任務完成情況:今日任務較少,程式碼量較小,主要為老師例程執行,瞭解指標概念 e.g. : #include<stdio.h> #inclu
計算機圖形學的學習
隱式曲面(Implicit Surface)的造型:就是用函式形式為F( x ,y ,z ) = 0的曲面進行造型,這樣的造型技術適合描述動物器官一樣的肉乎乎的東西,有2本書推薦大家Jules Bloomenthal編輯的Introduction to Implicit Surfaces,是一本專著,講述了I
我的程式設計學習日誌(5)-- 教你快速的輸入程式碼(程式設計競賽中的小技巧)
1,typedef簡化輸入 在程式設計中如果用到結構體,每次定義變數時都要輸很長的程式碼,特別是在建連結串列時,經常重複輸入struct…,為了避免這種重複,可以用typedef 。 不過不建議在實際
Java學習日誌01
基本概念: 基本的Java術語 JRE :java執行環境 J2SE:java2標準環境 J2ME:java2手機開發環境 J2EE:java2企業級開發環境 JVM:java虛擬機器 3年以上工作經驗,有至少1個大型專案經驗,精通JSP,Servlet,JNDI,EJB
Egret白鷺引擎學習日誌01
1.簡介 egret是一個開源免費的遊戲框架,它使用TypeScript指令碼語言進行開發; 2.下載安裝包 下載完成後根據提示進行安裝 根據自己需求進行安裝相應版本 3.下載工具 根據需求下載相應工具,我學習開始下載的工具也就是圖下已安裝的工具
關於計算機圖形學的學習
引言 什麼是計算機圖形學? 本文儘量避免給它做嚴格的定義,但是通常來說,計算 機圖形學是數字圖象處理的逆過程,這只是一個不確切的定義,後面我們會看到, 實際上,計算機圖形學、數字圖象處理和計算機視覺在很多地方的區別不是非常 清晰的,很多概念是相通的。 計算機圖形學是
Directx9.0 學習教程3 -圖形學之創建點 線 三角形 等
d3d custom 發現 介紹 data- directx 組成 water 詳細 1、首先 介紹點的表示方法 struct CUSTOMVERTEX { float x,y,z; }; CUSTOMVERTEX Vertices[] = { {-5.0
路飛學城-Python開發集訓-學習心得01
年輕 小夥伴 java 可能 有導師 視頻 進行 互聯 mil 不知不覺,已經進行了10個日夜,在7月7之前,有過接觸甚至有半年的時間看過相關python書籍乃至小視頻, 但正如所說,在沒有什麽編程基礎的情況下,考自學學成率不足5%。回想起來0基礎學java被某內忽悠,
CS184.1X 計算機圖形學導論 第7講 V1-3 學習筆記
線上 物體 創建 strong 公式推導 導論 幾何 ng- 解決方法 L7V1:OPENGL 著色:學習動機 1.光照的重要性 1)能夠真正顯示出形狀感知的外觀; 2)準確的著色和光照對對傳達物體的形狀非常重要; 3)著色的方式也十分重要:平面著色(GL_FLAT)、平滑
CG-光柵圖形學直線掃描轉換算法-學習筆記
圖形 點畫 整數 mar bresenham bsp pla 位移 ali 一、直線掃描轉換算法——DDA畫線算法 備註:DDA(Digital Differential Analyzer) ---> 數值微分法 1. 引進圖形學中的一個很重要的思想——增量思想 2.
CG-光柵圖形學裁剪算法-學習筆記
復雜 顯示 圖形 因此 延長 比較 信息 spa 矩形區域 一、引入 1. 為什麽要裁剪?——使用計算機處理圖形信息時,計算機內部存儲的圖形往往比較大,而屏幕顯示的知識圖形的一部分。因此需要確定圖形哪些部分落在顯示區之內,哪些落在顯示區之外。這個過程就稱為裁剪。 2. 點的
CG-光柵圖形學消隱算法-學習筆記
朝向 需要 窗口 在外 ber pan inf 出現 一段 【引入】 1. 目的:當我們觀察空間任何一個不透明的物體時,只能看到該物體朝向我們的那些表面,其余的表面由於物體所遮擋我們看不到。所以需要消隱,來消除被遮擋的不可見的線或面,消除二義性,繪制出意義明確、富有真實感
2018/10/01學習日誌。
1, 運算子, 運算子的優先順序, 邏輯運算子, 條件運算子,條件表示式, ++,--操作符, 位運算, 2, 基本把第三章內容看懂了, 3 部分運算子優先順