2022年3月14日 星期一

XCweek04

 week04

1.到 https://jsyeh.org/3dcg10/下載win32跟data


    windows.zip =>下載\windows\Transformation.exe
    data.zip =>下載\windows\data\很多模型檔
    執行 下載\windows\Transformation.exe
2.接著打開Transformation.exe,會出現畫面


3.開啟以前的程式 加入三行程式碼
4.用座標讓他變成四個
#include <GL/glut.h>
void myTeapot(float x, float y)///自定義函數
{
    glPushMatrix();
        glTranslatef( x, y, 0);
        glutSolidTeapot(0.3);
    glPopMatrix();
}

void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glColor3f(1,0,0);
    myTeapot(+0.5, +0.5);
    myTeapot(+0.5, -0.5);
    myTeapot(-0.5, -0.5);
    myTeapot(-0.5, +0.5);

    glutSwapBuffers();

}

int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week04茶壺");

    glutDisplayFunc( display );

    glutMainLoop();
    return 0;
}
5.滑鼠事件
int 一個mouse外掛事件
            void mouse(int button,int state, int x, int y)
            {
                printf("%d %d %d %d\n", button, state, x, y);
            }
整體程式碼
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glutSwapBuffers();
}
void mouse(int button,int state, int x, int y)
{
    printf("%d %d %d %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();

    return 0;
}

點擊一下會出現座標
6.用滑鼠事件培和茶壺去讓滑鼠控制茶壺,使茶壺會因為你滑鼠點擊的位子而做改變
#include <GL/glut.h>
#include <stdio.h>
int mouseX=0, mouseY=0;
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glColor3f(1,1,0);
    glPushMatrix();
        glTranslatef((mouseX-150)/150.0,-(mouseY-150)/150.0, 0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void mouse(int button,int state, int x, int y)
{
    //printf("%d %d %d %d\n", button, state, x, y);
    mouseX=x; mouseY=y;
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week04 mouse");

    glutDisplayFunc( display );
    glutMouseFunc(mouse);
    glutMainLoop();

    return 0;
}

7.滑鼠事件線段
#include <GL/glut.h>
#include <stdio.h>
int mouseX=0, mouseY=0, N=0;
int mx[100], my[100];
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glColor3f(1,1,0);
    glBegin(GL_LINE_LOOP);
        for(int i=0; i<N; i++){
            glVertex2f((mx[i]-150)/150.0,-(my[i]-150)/150.0);
        }
    glEnd();
    glutSwapBuffers();
}
void mouse(int button,int state, int x, int y)
{
    //printf("%d %d %d %d\n", button, state, x, y);
    mouseX=x; mouseY=y;
    if(state==GLUT_DOWN){
        printf("   glVertex2f( (%d-150)/150.0, -(%d-150)/150.0 );\n", x ,y);
        N++;
        mx[N-1]=x; my[N-1]=y;
    }
}
int main(int argc, char**argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("week04 mouse");

    glutDisplayFunc( display );
    glutMouseFunc(mouse);
    glutMainLoop();

    return 0;
}




    


沒有留言:

張貼留言