Week06 -1-1
開啟一個新的GLUT專案
檔名為Week06-1_TRT_ROBOT2_TEAPOT
然後使用上周的week05-2程式來修改
程式修改如下
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01, 30, 30);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
glTranslatef(0.45,0, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
茶壺就會開始旋轉了
加入這行程式碼glTranslatef(0.5,0.5,0);
茶壺就會懸掛在那個位置了
Week06-2-1今天的第二個程式再開啟一個新的GLUT專案
檔名為week06-2_TRT_robot3_hierarchy
程式碼刪掉用上週的程式碼來改
程式碼如下
#include <GL/glut.h>
float angle=0;
void myCube()
{
glPushMatrix();
glScalef(1,0.3,0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01,30,30);
glPushMatrix();
myCube();
glPopMatrix();
glutSwapBuffers();
angle++;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
就會出現細長的小方塊了
加入 glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
讓它旋轉
然後再加入glPushMatrix();
glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
myCube();
glPopMatrix();
讓他多一個手臂跟著旋轉
Week06-2-2
今天的第三個程式 開新專案檔名為week06-3_TRT_ROBOT4 複製今天的第二個程式碼並加入下列程式碼
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(-0.25,0,0);
myCube();
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(-0.25,0,0);
myCube();
glPopMatrix();
glPopMatrix();
主要就是更改座標 從正的改成負的
就會在對角處多出一條手臂了
今天的第四個程式
開新專案檔名為week06-4_TRT_ROBOT5_mouse_motion_angle
程式碼如下
#include <GL/glut.h>
float angle=0;
void myCube()
{
glPushMatrix();
glScalef(1,0.3,0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01,30,30);
glPushMatrix();
glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
myCube();
glPushMatrix();
glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
myCube();
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
myCube();
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
myCube();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)
{
angle = x;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");
glutMotionFunc(motion);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
就會出現兩個手臂並可以用滑鼠去揮動他(改變他的位置)
第三節課老師讓我們練習期中考考題
網址:https://jsyeh.org/gl/
答案為:
1. glPushMatrix();//備份矩陣
2. glTranslatef(x,y,z);平移
3. glRotatef(angle,x,y,z);旋轉
4. glScalef(x,y,z);縮放
5. glBegin(GL_POLYGON);開始畫
6. glNormal3f(x,y,z);打光的法向量
7. glTexCoord2f(x,y);貼圖座標
8. glColor3f(x,y,z);色彩
9. glVertex3f(x,y,z);頂點
10. glEnd();結束
11. glPopMatrix();還原矩陣
然後再稍微修改06-2-3的程式
就會變成用滑鼠左右滑動會揮動更快了
全部的程式碼如下:
#include <GL/glut.h>
float angle=0;
void myCube()
{
glPushMatrix();
glScalef(1,0.3,0.3);
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(0.01,30,30);
glPushMatrix();
glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
myCube();
glPushMatrix();
glTranslatef(0.25,0,0);
glRotatef(angle,0,0,1);
glTranslatef(0.25,0,0);
myCube();
glPopMatrix();
glPopMatrix();
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
myCube();
glPushMatrix();
glTranslatef(-0.25,0,0);
glRotatef(-angle,0,0,1);
glTranslatef(-0.25,0,0);
myCube();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int oldX=0;
void mouse(int button,int state,int x,int y)
{
oldX = x;
}
void motion(int x,int y)
{
angle += (x-oldX);
oldX = x;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06");
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
cd desktop
git clone https://github.com/dannyyu0521/2023graphicsb
將檔案放入資料夾
git add .
git config --global user.email dannyyyu0521@gmail.com
git config --global user.name dannyyu0521
git commit -m "add week06"
沒有留言:
張貼留言