2021年3月15日 星期一

(1)主題:mouse motion函式


 #include <GL/glut.h>

#include <stdio.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot( 0.3 );

    glutSwapBuffers();


}

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

{

    printf("button:%d state:%d y:%d\n", button, state, x,y);///用滑鼠點來顯示座標

}


int main(int argc, char** argv)///也可以打*argv[]

{

    glutInit(&argc, argv);

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week04 mouse");


    glutDisplayFunc(display);

    glutMouseFunc(mouse);

    glutMainLoop();


}

如下圖:




座標程式碼:

#include <GL/glut.h>

#include <stdio.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot( 0.3 );

    glutSwapBuffers();


}

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

{

    if( state==GLUT_DOWN ){///如果滑鼠按下去,印出程式碼

    printf(" glVertex3f((%d-150)/150.0, -(%d-150)/150.0, 0);\n", x, y);///印出來

    }

}


int main(int argc, char** argv)///也可以打*argv[]

{

    glutInit(&argc, argv);

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("Week04 mouse");


    glutDisplayFunc(display);

    glutMouseFunc(mouse);

    glutMainLoop();


}

如下圖:


(2)主題: 移動、旋轉、放大縮小
 glTranslatef(x, y, z);
glRotatef( angle, x, y, z);
 glScalef(x, y, z);


移動程式碼:

#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;///茶壺的座標-1.0...+1.0
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///矩陣備份
        glTranslatef(teapotX, teapotY, 0);///照著座標,移動
        glutSolidTeapot( 0.3 );
    glPopMatrix();///矩陣還原
    glEnd();
    glutSwapBuffers();

}
///void mouse(int button, int state, int x, int y)
///{

///}
void motion(int x, int y )
{
    teapotX = (x-150)/150.0;
    teapotY = -(y-150)/150.0;
    display();
}
int main(int argc, char** argv)///也可以打*argv[]
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week04 mouse");

    glutDisplayFunc(display);
    glutMotionFunc(motion);///準備移動函式
    glutMainLoop();

}

如下圖:



以下是有關
旋轉的原始示範視窗:



其中
glRotatef( angle, x, y, z); 為旋轉
旋轉為固定XYZ其中一個為方向開始旋轉
可以上下,可以左右(另某個座標為主開始旋轉,方向因而不同)
glTranslatef(x, y, z); 為移動
glScalef(x, y, z); 為大小








如上圖以X軸為座
標進行旋轉是上下移動





上圖是以Y軸座標進行旋轉左右移動


上圖是以Z軸座標進行中心點的旋轉

沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...