2023年3月2日 星期四

10160305賴奕廷week03

*Step01:下載老師的檔案

 https://jsyeh.org/3dcg10 下載 [data] 和 [win32]

下載完後解壓縮,將data資料夾放入windows資料夾中



執行Transformation.exe檔

*Step02:前置準備

CodeBlock開GLUT專案(先去lib複製libfreeglut.a修改檔名成libglut32.a)


複製茶壺程式碼
#include <GL/glut.h>
void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();  //交換顯示
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);  //設定顯示模式
    glutCreateWindow("week03");  //視窗名稱
    glutDisplayFunc(display);  //顯示的函式
    glutMainLoop();  //主要迴圈最後
}

*Step03:改變茶壺位置



#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("week03");  //視窗名稱
    glutDisplayFunc(display);  //顯示的函式
    glutMainLoop();  //主要迴圈最後
}

*Step04:用滑鼠控制茶壺移動



#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();  //主要迴圈最後
}

*Step05:用滑鼠製圖並顯示座標



#include <GL/glut.h>
#include <stdio.h>
float X=0,Y=0,Z=0;
void display()
{
    //留下glClear()清背景,glutSwapBuffers
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_POLYGON);
      glVertex2f(-0.01,-0.49);
      glVertex2f(-0.53,-0.27);
      glVertex2f(-0.63,0.25);
      glVertex2f(-0.40,0.53);
      glVertex2f(-0.17,0.58);                               這裡可以自己改
      glVertex2f(0.04,0.57);
      glVertex2f(0.40,0.46);
      glVertex2f(0.71,-0.08);
      glVertex2f(0.54,-0.40);
      glVertex2f(0.13,-0.53);
      glVertex2f(-0.13,-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();  //主要迴圈最後
}

沒有留言:

張貼留言