1.旋轉方塊
2.旋轉方塊
2021電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
本周教學的內容如下:
☆複習上週內容☆
Week06
1.上星期的加一點紅色的程式碼
210329 week06
🔔 ❤️
(有點長)
(粉紅底 為新增的藍藍細長方塊)
(抹茶色底 為按空白鍵就能轉動的關鍵)
#include <GL/glut.h>///(0)使用GLUT外掛
#include <stdio.h>
int N=0, vx[3000],vy[3000];///準備一堆頂點,等等要畫,介於-1~+1
float angle=0;///有N個頂點
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
glPushMatrix();///TODO:備份矩陣
glRotatef(angle,0,0,1);///TODO:旋轉
glScalef(0.5,0.1,0.1);///調成細長的
glColor3f(0.3,0.3,1.0);///藍藍的
glutSolidCube(1);///方塊
glPopMatrix();///TODO:還原矩陣
glutSwapBuffers();///交換兩倍的Buffers
}
void keyboard( unsigned char key,int x,int y)
{
angle++;///TODO:
display();///TODO:
}
void motion(int x,int y)
{
printf("%d %d\n",x,y);///把頂點記起來,等等要畫
vx[N]=(x-150)/150.0;
vy[N]=-(y-150)/150.0;
N++;
display();
}
int main(int argc, char**argv)///???以前是int main()
{
glutInit(&argc,argv);///(1)GLUT初始設定
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
glutCreateWindow("08160891我是JOJO");///(3)開窗
glutKeyboardFunc(keyboard);
glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)
///glutMouseFunc(mouse);///TODO:(1)mouse滑鼠的程式
glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式
glutMainLoop();///(5)主要迴圈
}
滑鼠轉轉
(抹茶色底 為更改部分)
#include <GL/glut.h>///(0)使用GLUT外掛
#include <stdio.h>
int N=0, vx[3000],vy[3000];///準備一堆頂點,等等要畫,介於-1~+1
float angle=0;///有N個頂點
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
glPushMatrix();///TODO:備份矩陣
glRotatef(angle,0,0,1);///TODO:旋轉
glScalef(0.5,0.1,0.1);///調成細長的
glColor3f(0.3,0.3,1.0);///藍藍的
glutSolidCube(1);///方塊
glPopMatrix();///TODO:還原矩陣
glutSwapBuffers();///交換兩倍的Buffers
}
void keyboard( unsigned char key,int x,int y)
{
}
void motion(int x,int y)
{
angle++;///TODO:////TODO:只要mouse在motion時,就會增加角度
display();///TODO:增加後,重畫畫面
//printf("%d %d\n",x,y);///把頂點記起來,等等要畫
// vx[N]=(x-150)/150.0;
///vy[N]=-(y-150)/150.0;
//// N++;
//////display();
}
void mouse(int button,int state,int x,int y)
{
}
int main(int argc, char**argv)///???以前是int main()
{
glutInit(&argc,argv);///(1)GLUT初始設定
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
glutCreateWindow("08160891我是JOJO");///(3)開窗
glutKeyboardFunc(keyboard);
glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)
glutMouseFunc(mouse);///TODO:(1)mouse滑鼠的程式
glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式
glutMainLoop();///(5)主要迴圈
}
(刪掉豪多部分)
(抹茶色底 為更改部分)
#include <GL/glut.h>///(0)使用GLUT外掛
float angle=0;///有N個頂點
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
glPushMatrix();///TODO:備份矩陣
glRotatef(angle++,0,0,1);///TODO2:要轉動angle
glutSolidCube(1);///方塊
glPopMatrix();///TODO:還原矩陣
glutSwapBuffers();///交換兩倍的Buffers
}
int main(int argc, char**argv)///???以前是int main()
{
glutInit(&argc,argv);///(1)GLUT初始設定
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
glutCreateWindow("08160891我是JOJO");///(3)開窗
glutIdleFunc(display);///TODO:idle很閒的時候,就重畫畫面
glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)
glutMainLoop();///(5)主要迴圈
}
長條轉轉(自己轉)
(抹茶色底 為更改部分)
#include <GL/glut.h>///(0)使用GLUT外掛
float angle=0;///有N個頂點
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
glPushMatrix();///TODO:備份矩陣
glTranslatef(0,0,0);///把正確的手臂,掛在肩上
glRotatef(angle++,0,0,1);///TODO2:要轉動angle
glTranslatef(-0.25,0,0);///將旋轉中心,放在正中心
glScalef(0.5,0.1,0.1);///細細長長的
glutSolidCube(1);///方塊
glPopMatrix();///TODO:還原矩陣
glutSwapBuffers();///交換兩倍的Buffers
}
int main(int argc, char**argv)///???以前是int main()
{
glutInit(&argc,argv);///(1)GLUT初始設定
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
glutCreateWindow("08160891我是JOJO");///(3)開窗
glutIdleFunc(display);///TODO:idle很閒的時候,就重畫畫面
glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)
glutMainLoop();///(5)主要迴圈
}
把下面兩行刪掉即可
👉///glTranslatef(0,0,0);///把正確的手臂,掛在肩上
👉///glRotatef(angle++,0,0,1);///TODO2:要轉動angle
下手肘轉轉
(抹茶色底 為更改部分)
增加個void hand()
#include <GL/glut.h>///(0)使用GLUT外掛
float angle=0;///有N個頂點
void hand()
{
glPushMatrix();///TODO:備份矩陣
glScalef(0.5,0.1,0.1);///細細長長的
glutSolidCube(1);///方塊
glPopMatrix();///TODO:還原矩陣
}
void display()
{
......
}
左手臂轉轉
期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...