2023年3月2日 星期四

week03 余

 week03-1

去小葉老師的網站:https://jsyeh.org/3dcg10/ 下載window.zip和data.zip


解壓縮windows.zip和data.zip後開啟transformation.exe


就會出現酷酷的東西了

也可以按滑鼠右鍵去更改圖示
或用滑鼠上下拉動glTranslatef的地方更改位置

 week03-2
開啟codeblock和前幾週的方式一樣打開glut
打開上周的茶壺
然後修改一些程式碼
#include <GL/glut.h>
void display()
{
    glPushMatrix();///備份矩陣
    glTranslatef(0.5,0.5,0);(可讓茶壺移動)///會改變你的矩陣

    glutSolidTeapot(0.3);
    glPopMatrix();///還原矩陣
    glutSwapBuffers();
}
int main(int argc,char *argv[])
{
    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("GLUT Shapes");

    glutDisplayFunc(display);

    glutMainLoop();
}
  結果如下



 week03-3
再開啟一個新的glut複製和上一個一樣的程式碼
要教如何加上mouse的功能去控制他的移動
#include <GL/glut.h>
float X=0,Y=0,Z=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);(清除背景)
    glPushMatrix();///備份矩陣
    glTranslatef(X,Y,Z);///會改變你的矩陣
    glutSolidTeapot(0.3);///畫出實心的茶壺
    glPopMatrix();///還原矩陣
    glutSwapBuffers();

}
void mouse(int button, int state,int x,int y)
{
    X=(x-150)/150.0;
    Y=-(y-150)/150.0;
}
int main(int argc,char *argv[])
{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week03");
    glutMouseFunc(mouse);

    glutDisplayFunc(display);
    glutMainLoop();

}   
結果如下


接下來要更進階用程式碼畫出圖形
#include <GL/glut.h>
#include <stdio.h>
float X=0,Y=0,Z=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_LINE_LOOP);
        glVertex2f(0.09,-0.11);
        glVertex2f(-0.10,-0.15);
        glVertex2f(-0.28,-0.15);
        glVertex2f(-0.49,-0.06);
        glVertex2f(-0.02,0.23);
        glVertex2f(-0.02,0.29);
        glVertex2f(0.02,0.43);
        glVertex2f(0.09,0.53);
    glEnd();
    glutSwapBuffers();

}
void mouse(int button, int state,int x,int y)
{
    X=(x-150)/150.0;
    Y=-(y-150)/150.0;
    if(state==GLUT_DOWN)printf("  glVertex2f(%.2f,&.2f);\n",X,Y);
}
int main(int argc,char *argv[])
{

    glutInit(&argc,argv);

    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

    glutCreateWindow("week03");
    glutMouseFunc(mouse);

    glutDisplayFunc(display);
    glutMainLoop();

}
結果如下


沒有留言:

張貼留言