2023年3月1日 星期三

Week03

 Week03 10160704

 首先到這個網站,https://jsyeh.org/3dcg10/
把data win32 glut32.dll下載下來,然後把win32解壓縮,再把data拉到win32資料夾再開transformatiom.exe就可以
 #include <GL/glut.h>
void display()
{
    glTranslatef(0.5, 0, 0);//現在只寫這行還不夠,小茶壺會飄來票去
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc,char *argv[])
{///上面是特別的main()函式,有很多參數
    glutInit(&argc, argv);///把GLUT開起來
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///上面
    glutCreateWindow("GLUT Shapes");///要開式窗
    glutDisplayFunc(display);///要顯示的對應函式
    glutMainLoop();///最後用main迴圈,壓在最後面
}


#include <GL/glut.h>
void display()
{
glPushMatrix();///備份矩陣
        glTranslatef(0.5,0,0);
        glutSolidTeapot( 0.3 );///還原矩陣
    glPopMatrix();
glutSwapBuffers();
}
#include <stdio.h>
void mouse(int button, int state, int x,int y)
{
    printf("%d %d %d %d\n",button,state,x,y);///小黑視窗會顯示出,左鍵右鍵中鍵X、Y座標等資訊
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);

    glutMouseFunc(mouse);
    glutMainLoop();
}


#include <GL/glut.h>
float X=0, Y=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清理背景不清會有殘影

glPushMatrix();///備份矩陣
        glTranslatef( X, Y, 0);
        glutSolidTeapot( 0.3 );
    glPopMatrix();/// 還原矩陣
glutSwapBuffers();
}
#include <stdio.h>
void mouse(int button, int state, int x,int y)
{
    X = (x-150)/150.0;
    Y = -(y-150)/150.0;
    ///口角一樣檢一半除一半 y要加負號
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("GLUT Shapes");
    glutDisplayFunc(display);

    glutMouseFunc(mouse);
    glutMainLoop();
}
///這樣點視窗哪裡茶壺就可以跑到哪裡


此為沒加glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )的結果

現在我們利用滑鼠來幫我們繪圖

#include <GL/glut.h>
#include <stdio.h>
float X=0, Y=0;
void display()
{

    glutSolidTeapot( 0.3 );

glutSwapBuffers();
}
void mouse(int button, int state, int x,int y)
{
    float X = (x-250)/250.0;
    float Y = -(y-250)/250.0;

    if(state == GLUT_DOWN) {
        printf("   glVertex2f(%.3f, %.3f);\n", X, Y);
    }///只要是滑鼠下壓事件就printf不然滑鼠彈回也會printf就會印兩次
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);///視窗設500x500
    glutCreateWindow("GLUT Shapes");


    glutDisplayFunc(display);



    glutMouseFunc(mouse);
    glutMainLoop();
}


只後我們用glBegin(GL_POLYGON)把右邊小黑視窗給我們的glVertex2f座標複製下來,利用他們來繪圖

你點的實在太亂所也座標會出來也不像,但是還是有雛型XD




沒有留言:

張貼留言