2021年3月15日 星期一

week04 圖片座標 複製圖片 滑鼠移動圖片 3D模型控制

 印出茶壺

#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 x:%d y:%d\n",button,state,x,y);
}
int main( int argc, char** 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)
{
    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);
    glBegin(GL_POLYGON);
        glVertex3f( (143-150)/150.0, -(114-150)/150.0, 0 );
        glVertex3f( (159-150)/150.0, -(114-150)/150.0, 0 );
        glVertex3f( (154-150)/150.0, -(122-150)/150.0, 0 );
        glVertex3f( (182-150)/150.0, -(128-150)/150.0, 0 );
        glVertex3f( (192-150)/150.0, -(149-150)/150.0, 0 );
        glVertex3f( (211-150)/150.0, -(129-150)/150.0, 0 );
        glVertex3f( (229-150)/150.0, -(130-150)/150.0, 0 );
        glVertex3f( (205-150)/150.0, -(164-150)/150.0, 0 );
        glVertex3f( (184-150)/150.0, -(185-150)/150.0, 0 );
        glVertex3f( (120-150)/150.0, -(182-150)/150.0, 0 );
        glVertex3f( (109-150)/150.0, -(176-150)/150.0, 0 );
        glVertex3f( (81-150)/150.0, -(142-150)/150.0, 0 );
        glVertex3f( (115-150)/150.0, -(136-150)/150.0, 0 );
        glVertex3f( (117-150)/150.0, -(131-150)/150.0, 0 );
        glVertex3f( (147-150)/150.0, -(123-150)/150.0, 0 );
        glVertex3f( (142-150)/150.0, -(117-150)/150.0, 0 );
    glEnd();
    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)
{
    glutInit( &argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04 mouse");

    glutDisplayFunc( display );
    glutMouseFunc( mouse);
    glutMainLoop();
}
-------------------------------------------------------------------------------------
移動茶壺
#include<GL/glut.h>
#include<stdio.h>
float teapotX=0, teapotY=0;
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslated( teapotX, teapotY, 0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glEnd();
    glutSwapBuffers();
}
//void mouse(int button, int state, int x, int y)
//{
//   printf("button:%d state:%d x:%d y:%d\n",button,state,x,y);
//}
void motion( int x, int y)
{
    teapotX=(x-150)/150.0;
    teapotY=-(y-150)/150.0;
    display();         //移動顯示
}
int main( int argc, char** argv)
{
    glutInit( &argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week04 mouse");

    glutDisplayFunc( display );
    //glutMouseFunc( mouse);
    glutMotionFunc( motion );
    glutMainLoop();
}
------------------------------------------------------------------
3D模型控制
旋轉
依照4個參數來決定模型旋轉
glRotatef( 0(依照手指方向進行旋轉) , 0(以左右為主軸)0(以上下為主軸) , 0(以前後為主軸) );
                 數字增加朝手指方向旋轉    1為向右,0為向左    1為向上,0為向下   1為向前,0為向後
                 數字減少則進行反向旋轉
移動
glTranslatef( 0(左右移動) , 0(上下移動) , 0(前後移動) ); 
 數字增加       向右移動     向上移動         向前移動   
 數字減少       向左移動     向下移動         向後移動
縮放
glScalef( 0(左右縮放) , 0(上下縮放) , 0(前後縮放) );
數字增加   左右放大     上下放大         前後放大   
數字減少   左右縮小     上下縮小         前後縮小


沒有留言:

張貼留言

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

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