2021年3月17日 星期三

chjyuʕ •ᴥ•ʔ week04

 1.MouseFunc

(點一個地方就會產生座標)













程式碼:

#include <GL/glut.h>

#include <stdio.h>///要使用printf

void display()///使用GLUT外掛程式

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot(0.3);

    glutSwapBuffers();///交換兩倍的buffers

}

void mouse(int button, int state, int x, int y)

{               ////滑鼠左中右鍵////上下///XY座標

    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);///初始化Display功能

    glutCreateWindow("我是08160910 GOOD!");///建立GLUT視窗

    glutDisplayFunc(display);

    glutMouseFunc( mouse);///註冊mouse函式

    glutMainLoop();

}

        :多加程式  

2.MotionFunc





程式碼:

#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) ///mouse motion在拖動它

{

    vx[N]=x; vy[N]=y; ///把vx,vy的值存起來

    N++;

    display(); ///邊動mousemotion, 邊畫display()

}

int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("我是08160910 GOOD!");

    glutDisplayFunc(display);

    glutMotionFunc(motion); ///mouse motion在動喔

    glutMainLoop();

}

3.移動旋轉縮放


理解:
glRotatef( angle, x, y, z);





(1)ex;(0.00,  0.00, 1.00, 0.00)

如果:y軸是的,物體會向左旋轉
(舉起右手大拇哥,看看其他四隻手朝甚麼方向)


(2)ex;(0.00,  0.00, -1.00, 0.00)

如果:y軸是的,物體會向旋轉
(舉起右手大拇哥做一個倒讚,看看其他四隻手朝甚麼方向)

(3)ex:(0.00,  1.00,1.00,0.00)



物體的右肩膀向下






















沒有留言:

張貼留言

距地表面160 Week11

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