2024年6月6日 星期四

罐頭's 電腦圖學日記 Week16

  week16  

##week16-0_sample

***設定環境***

0. 桌面安裝 freeglut , 把 lib 的 libfreeglut.a 複製成 libglut32.a   

1. 安裝 OpenCV --> 桌面\葉正聖老師上課用軟體\OpenCV-2.1.0-win32-vs2008

2. 小心1: Add OpenCV to ... PATH , 要安裝在預設的 C:\OpenCV2.1 目錄裡

3. 安裝完後,重開 CodeBlocks 

4. 設定 Setting-Compiler 要加入3個設定

  • search 目錄 Compiler 的 include 目錄加 C:\OpenCV2.1\include
  • search 目錄 Linker 的 lib 目錄加 C:\OpenCV2.1\lib
  • 加入 Linker 設定的3個檔名 cv210  cxcore210  highgui210

5. File-New-Project , GLUT 專案  week16-0_sample


#看課本範例

1. 請到 https://jsyeh.org/3dcg10 下載課本範例 source data win32 

2. windows.zip 解壓縮 => data.zip點開 => 將data資料夾複製到windows裡


3. 點開Projection.exe



##week16-1_sample_gluLookAt

1. File-New-Project , GLUT 專案  week16-1_sample_gluLookAt

2. 要改 resize( ) 函式,在裡面加上gluLookAt( ) 函式,就可以看著左上角的那個圓球!



3. 把第39行gluLookAt( 0, 0, 0, -2.4, 1.2, -6, 0, 1, 0); ---->要註解掉

4. 在void key( ) 增加下列程式碼,使按鍵123按下之後改變看著的位置

```cpp

if(key=='1'){ ///看左上方

        glMatrixMode(GL_MODELVIEW);

        glLoadIdentity();

        gluLookAt( 0, 0, 0, -2.4, 1.2, -6, 0, 1, 0);

    }else if(key=='2'){ ///看上方

        glMatrixMode(GL_MODELVIEW);

        glLoadIdentity();

        gluLookAt( 0, 0, 0, 0, 1.2, -6, 0, 1, 0);

    }else if(key=='3'){ ///看右上方

        glMatrixMode(GL_MODELVIEW);

        glLoadIdentity();

        gluLookAt( 0, 0, 0, 2.4, 1.2, -6, 0, 1, 0);

    }

```

如下圖


按1



按2


按3




##week16-2_glutReshapeFunc_gluPerspective_gluLookAt

***先看課本 Projection.exe 的範例***

  • gluPerspective 透視投影
  • glOrtho 垂直投影
  • glFrustum 比較奇怪 , 通常不會用他的投影法,左、右遠,共6組參數
  • gluPerspective (視角 , 長寬比, z近, z遠)
  • fovy --> field of view in y 視角
  • aspect ratio 長寬比


***要寫11+8行,做出透視投影***

1. File-New-Project , GLUT 專案  week16-2_glutReshapeFunc_gluPerspective_gluLookAt

2. 貼上11行 GLUT 簡單程式碼

3. 在int main( ) 裡,加入 glutReshapeFunc(reshape);

4. 寫自己的 void reshape(int w, int h){...}

拉視窗茶壺不會變形

5. glutInitWindowSize(300,600);  ///加這行可改視窗長寬


##week16-3_myTexture_id1_id2_glBindTexture

若想要有「兩張貼圖」(一張背景 一張模型)

1. File-New-Project , GLUT 專案  week16-3_myTexture_id1_id2_glBindTexture

2. 偷用week05_rotating_earth /main.cpp 裡的程式碼

3. 但執行會出錯OpenCV Error: Null pointer (NULL array pointer is passed) in unknown function, file ..\..\..\..\oc

















沒有留言:

張貼留言