step01-1
alpha內插公式: alpha: 0.0~1.0
angle = alpha*新 + (1-alpha)*舊
ex:
alpha: 0 => 舊
alpha: 0.5 => 半新半舊
alpha: 1 => 新
可以使用 Excel or Google Spreadsheet 來做練習
step01-2
用程式試試看
step02-2
利用課本的範例講解glutLookAt
step03-1
創一個新專案week16_camera_projection_glutLookAt
2022電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
alpha內插公式: alpha: 0.0~1.0
angle = alpha*新 + (1-alpha)*舊
ex:
alpha: 0 => 舊
alpha: 0.5 => 半新半舊
alpha: 1 => 新
可以使用 Excel or Google Spreadsheet 來做練習
用程式試試看
利用課本的範例講解glutLookAt
step03-1
創一個新專案week16_camera_projection_glutLookAt
glPushMatrix();
myDrawObject(0);畫身體
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06);往左下方移動(讓軸心在正中央)
myDrawObject(1);畫手臂(右上方)
glPopMatrix();
myDrawObject(0);畫身體
glPushMatrix()
glTranslatef(0.15,0.20,0);往右上方移
glRotatef(angle,0,0,0);//這個旋轉會轉下面所有的東西
glTranslatef(0.02,-0.06,0);往左下方移動(讓軸心在正中央)
myDrawObject(1);畫手臂(右上方)
glPopMatrix();
step01:
持續實作 glm 模型相關練習: 把茶壺貼上Gundam的貼圖
程式碼:
持續實作glm模型相關練習: 把模型整個讀進來
1.在https://jsyeh.org/3dcg10/下載三個檔案
2.把glm.c改成glm.cpp,把glm.h glm.cpp放到week11_gundam專案目錄裡
3.在week11_gundam專案中 add files 加入glm.cpp
利用maya切割模型 youtube關鍵字搜尋 maya匯出obj檔案
Step01-1:開啟一個GLUT專案
Step01-2:複製上週貼圖座標的程式碼
```
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 texture");
glutDisplayFunc(display);
myTexture("earth.jpg");
glutMainLoop();
}
OpenCV設定: setting-compiler , search directories , compiler include: C:\opencv2.1\include
OpenCV設定: setting-compiler , search directories , Linker lib目錄: C:\opencv2.1\lib
OpenCV設定: setting-compiler , Linker設定: 咒語 cv210 cxcore210 highgui210
XXX.jpg 圖檔要放哪: 工作目錄working_dir (in C:\Users\...\Desktop\freeglut\bin)
Step02-1:
1.新專案week10_texture_earth
最上面要加這行
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <GL/glut.h>
GLUquadric * sphere = NULL;///指標指到二次曲面
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB);
glEnable(GL_TEXTURE_2D);
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
return id;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gluQuadricTexture(sphere,1);///設好貼圖
gluSphere(sphere,1,30,30);///畫圓球
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10 texture");
glutDisplayFunc(display);
myTexture("earth.jpg");///地球的地圖
sphere = gluNewQuadric();///準備好二次曲面
glutMainLoop();
}
地球旋轉:
程式碼:step 1-3
了解GLUT範例 sample.cpp 177行 做什麼事
```C++
#include <GL/glut.h>
```
GLUT callback?會被GLUT呼叫的函式
我們寫的那些display() keyboard() mouse() motion()函式
1. 下載範例 https://jsyeh.org/3dcg10
data.zip , windows.zip
2. windows.zip =解壓=> 下載\windows\Transformation.exe
data.zip =解壓=> 下載\windows\data\模型.obj
Light Material.exe
(左上)左鍵拖移可選轉
(左上)右鍵換模型
(左下)右鍵換Material
下面的程式碼都不用打:
GLfloat light_pos[] = {-2.0,2.0,2.0,1.0};陣列
glLightfv(GL_LIGHT0,GL_POSITION,陣列)
第幾盞燈 位置
打光後的Teapot:
1. 下載範例 https://jsyeh.org/3dcg10
data.zip , windows.zip
2. windows.zip =解壓=> 下載\windows\Transformation.exe
data.zip =解壓=> 下載\windows\data\模型.obj
Keyboard Function:
step01:
選轉方向依照右手定則
0,1,0選轉方向
1. 下載範例 https://jsyeh.org/3dcg10
data.zip , windows.zip
2. windows.zip =解壓=> 下載\windows\Transformation.exe
data.zip =解壓=> 下載\windows\data\模型.obj
3. 執行 Transformation 看範例, 試試看
1. 下載範例 https://jsyeh.org/3dcg10
data.zip windows.zip glut32.dll
2. windows.zip =解壓=> 下載\windows\Shapes.exe
data.zip =解壓=> 下載\windows\data\模型
glut32.dll =複製=> 下載\windows\glut32.dll
3. 跑 Shapes.exe 看範例, 試試看
左可按右鍵選單: 大頂點、很多顏色
右可按右鍵選單: POINT....POLYGON
Teapot程式碼
#include <GL/glut.h>
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("第02週的程式喔!");
glutDisplayFunc(display);
glutMainLoop();
}
一. 一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam, 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...