glTranslatef(0.00,0.00,0.00);
0.在https://jsyeh.org/3dcg10/中下載[data][win32] glut32.dll三個檔案 / 在資料夾中開啟後分別解壓縮 / 將data資料夾放到window裡
1. 備份矩陣、還原矩陣、移動:開新Project:week03-1_Translate
/在main.cpp中更改程式碼複習上週畫出一個茶壺
/利用備份矩陣glPushMatrix()與還原矩陣 glPopMatrix()來移動茶壺位置
#include <GL/glut.h>void display(){glPushMatrix();///備份矩陣glTranslatef(0.5,0,0);///往右移動glutSolidTeapot( 0.3 );glPopMatrix();///還原矩陣glutSwapBuffers();}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("week03");glutDisplayFunc(display);glutMainLoop();}
2.加入滑鼠
2-1加入mousec()函式
#include <GL/glut.h>void display(){glPushMatrix();glTranslatef(0.5,0,0);glutSolidTeapot( 0.3 );glPopMatrix();glutSwapBuffers();}#include <stdio.h>void mouse(int button,int state,int x,int y){printf("%d %d %d %d\n",button,state,x,y);///state按下去是0,放開是1}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("week03");glutDisplayFunc(display);glutMouseFunc(mouse);///用mouseglutMainLoop();}
2-2利用global 變數,在函數之間傳值,滑鼠點到哪,茶壺位置就移到哪
#include <GL/glut.h>float X=0 ,Y=0;///利用global 變數,在函數之間傳值(大寫的)
void display(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景glPushMatrix();glTranslatef( X, Y,0);glutSolidTeapot( 0.3 );glPopMatrix();glutSwapBuffers();}void mouse(int button,int state,int x,int y){X=(x-150)/150.0;Y=-(y-150)/150.0;}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutCreateWindow("week03");glutDisplayFunc(display);glutMouseFunc(mouse);glutMainLoop();}
2-3 用https://gist.github.com/放入程式碼week03-2.cpp檔/放入HTML檢視中
3.用滑鼠點標畫畫:
3-1放大視窗並加入用滑鼠找標的功能 / 開新檔案
#include <GL/glut.h>#include <stdio.h>float X=0 ,Y=0;void display(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景glPushMatrix();glTranslatef( X, Y,0);glutSolidTeapot( 0.3 );glPopMatrix();glutSwapBuffers();}void mouse(int button,int state,int x,int y){float X=(x-250)/250.0;float Y=-(y-250)/250.0;if(state==GLUT_DOWN){///按下mouse時,才印出,避免有兩行一樣printf(" glVertex2f(%.3f, %.3f);\n",X,Y);}}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutInitWindowSize(500,500);///放大視窗glutCreateWindow("week03");glutDisplayFunc(display);glutMouseFunc(mouse);glutMainLoop();}
3-2小黑印出程式碼後,複製貼到原程式碼/
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///初始程式
glBegin(GL_POLYGON);
(貼入)
glEnd();
glutSwapBuffers();///初始程式
#include <GL/glut.h>#include <stdio.h>float X=0 ,Y=0;void display(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix();glTranslatef( X, Y,0);glutSolidTeapot( 0.3 );glPopMatrix();glBegin(GL_POLYGON);glVertex2f(-0.504, -0.684);glVertex2f(-0.652, -0.524);glVertex2f(-0.700, -0.356);glVertex2f(-0.564, -0.272);glVertex2f(-0.452, -0.280);glVertex2f(-0.176, -0.320);glVertex2f(-0.144, -0.464);glVertex2f(-0.160, -0.576);glVertex2f(-0.268, -0.644);glVertex2f(-0.352, -0.672);glVertex2f(-0.504, -0.684);glEnd();
glutSwapBuffers();}void mouse(int button,int state,int x,int y){float X=(x-250)/250.0;float Y=-(y-250)/250.0;if(state==GLUT_DOWN){printf("glVertex2f(%.3f, %.3f);\n",X,Y);}}int main(int argc, char *argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);glutInitWindowSize(500,500);glutCreateWindow("week03");glutDisplayFunc(display);glutMouseFunc(mouse);glutMainLoop();}
git指令
cd desktop
git clone https://github.com/你的帳號/2023graphicsa
cd 2023graphicsa
加入檔案
git add .
git status
git config --global user.email "jsyeh@mail.mcu.edu.tw"
git config --global user.name "jsyeh"
git commit -m "week10"
git push



.png)
.png)
.png)
.png)
.png)
.png)
沒有留言:
張貼留言