Step01:
1.alpha內插法
alpha:00.0~1.0
angle=alpha*new+(1-alpha)*old
2022電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
Step01:
1.alpha內插法
alpha:00.0~1.0
angle=alpha*new+(1-alpha)*old
Step01撥聲音:
1.file-new-empty file再改檔名.cpp
2.寫入
#include <windows.h>
#include <stdio.h>
int main(){
printf("playsound()前\n");
PlaySound("bb.wav",NULL,SND_SYNC);
printf("playsound()後\n");
}
2.Settings-Compiler-Linker settings
加入winmm
3.去https://sound-effects.bbcrewind.co.uk/search尋找想要的wav檔
3.下載後移到執行資料夾
4.執行結果(wav先改成跟下載的檔案同名
Step01:
1.File-New-Empty File 另存新檔改名week14-1.cpp
寫入
#include <stdio.h>
int main(){
FILE *fout=fopen("file.txt","w+");
printf("HELLO WORLD\n");
fprintf(fout,"HELLO WORLD\n");
fclose(fout);
}

Step01:
1.先寫入
void display(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glutSwapBuffers();
}
int main(int argc,char** argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(600,600);
glutCreateWindow("week13_RECT_TRT");
glutDisplayFunc(display);
glutMainLoop();
}
2.在display()加 glRectf(0.3,0.5,-0.3,-0.5);//矩形
Step01:
1.開啟Transformation.exe
2.Swap交換T,R
3.
glScalef(1.00,1.00,1.00);glBegin();->正常藍色車子
glTranslate(0.89,0.00,0.00);移到右邊
Step02:
myDrawObject(0);畫身體
glPushMatrix();
glTranslate(0.29,0.31,0);往右上移(身體右上角)
glRotatef(angle,0,0,1);做旋轉(物件要在該行程式下才會旋轉)
glTranslatef(-0.3,-0.19,0);往左下移動(讓軸心在中心)
myDrawObject(1);畫手臂
glPopMatrix();
Step03:
期末考題
glPushMatrix();
gltranslatef(-0.5,-0.9,0);把T掛到指定位置
glRotatef(-45,0,0,1);轉動物件角度
glTranslatef(-0.8,0.9,0);把下面T移到中心點
drawHand();
glPopMatrix();
Step04:
1.寫入之前程式
#include <GL/glut.h>
float angle=0;
void display(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);
glutSolidTeapot(0.2);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc,char** argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week12_TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
Step01:
1.載入myGundam.zip,data(file)放到工作目錄freeglut\bin\data
2.程式寫入:
#include <opencv/highgui.h>
int main(){
IplImage * img=cvLoadImage("data/Diffuse.jpg");
cvShowImage("week11",img);
cvWaitKey();
}
3.執行結果
Step01:
1.加入上週程式如下:
#include <GL/glut.h>
#include <opencv/highgui.h>
#include <opencv/cv.h>
int myTexture(char * filename)
{
IplImage * img = cvLoadImage(filename); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
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("week10_texture");
glutDisplayFunc(display);
myTexture("earth1.jpg");
glutMainLoop();
}
2.修改opencv設定
一. 一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam, 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...