2023年3月2日 星期四

yun的筆記week03


*Step01:下載範例

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

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


data裡有很多模型檔

點開會長這樣,就可以執行Transformation.exe檔了

*Step02:

CodeBlocks開新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:貼出漂亮的程式碼

用 GitHub Gist功能,新增程式並儲存,會照副檔名(.c .cpp .java .cs .py .html .javascript .css) 的文法來變色

再使用 Embedded JavaScript 的方式,,便能把那一行程式,用 HTML模式,插到部落格裡,注意前後順序

<script src="https://gist.github.com/annie91annie91/79422c3dcf6f866daec0707602c860a2.js"></script>

*Step04:讓茶壺移動

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

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

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

*Step06:用滑鼠製圖

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


沒有留言:

張貼留言