2021年3月17日 星期三

yun_電腦圖學筆記week04

 今天上課小葉老師教我們如何用滑鼠點的位置直接知道座標

#include<GL/glut.h>

#include<stdio.h>///為了printf()出現的 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidTeapot(0.3); glutSwapBuffers();///交換兩倍的buffers } void mouse(int button,int state,int x,int y)///這裡是今天新學的程式碼TODO:左鍵、中鍵、右鍵 下、上,x、y座標

{ printf("button: %d state: %d x: %d y: %d\n",button,state,x,y); } int main(int argc, char *argv[]) { glutInit(&argc, argv);///glut初始設定 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutMouseFunc( mouse );///註冊mouse的函式 glutMainLoop();






#include<GL/glut.h> int N=0,vx[3000],vy[3000]; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清空 glBegin(GL_LINE_LOOP); for(int i=0;i<N;i++) { glVertex2f((vx[i]-150)/150.0,-(vy[i]-150)/150.0); }///減一半,再除一半 減一半,再除一半,加負號 glEnd(); glutSwapBuffers(); } void motion(int x,int y) {///TODO2:mouse motion在拖動它 vx[N]=x;vy[N]=y;//把vx,vy存起來 N++; display();///邊動mouse motion,邊畫display() } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("08160093"); glutDisplayFunc(display); glutMotionFunc(motion);///TODO2:mouse motion在動 glutMainLoop(); }



這樣就完成了滑鼠移動跟著畫出線條的樣子

接著老師傳給我們一個程式
只需要點擊x,y,z就可以讓車車移動、旋轉、縮放,使用安培右手定則

安培右手定則x,y,z軸代表大拇指指的方向
z軸指向自己,y軸指向上下,x軸指向橫向
依照逆時針方向旋轉


































沒有留言:

張貼留言

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...