2023年3月2日 星期四

week03 Zhou

 Week03

week03-1

step01-1
到https://jsyeh.org/3dcg10/ 下載window.zip和data.zip壓縮檔
並把兩個壓縮檔解壓縮
把data資料夾解壓縮在windows資料夾裡






然後執行Trasnformation.exe 
用鼠標去試著上下拉動視窗裡的綠色數字
去觀察程式裡模型的變化




開啟CodeBlocks 並開啟GLUT專案 並下載把freeglut解壓縮
且把libfreeglut.a 複製改成libglut32.a
複製之前說的GLUT 10行程式碼並貼上在main
並執行程式 就會跑出一個茶壺




step01-2
利用 github gist功能 ,把你要打的程式,檔名(我是.cpp)打好
依照你打的檔案名稱 內容的程式碼文法會跟著變色






點選右上角的複製script
接著到部落格點選用HTML模式


接著把複製下來的script貼在最後一行

接著切回來原本的部落格更新後去預覽
HTML有沒有成功插入







step01-3
延續剛剛的程式碼 修改為

 glPushMatrix();        備份矩陣
        glTranslatef(0.5, 0.5, 0);        改變矩陣
        glutSolidTeapot(0.3);
    glPopMatrix();        還原矩陣

並執行程式就會出現以下畫面
茶壺會跟你給的數值而移動它的位置



複製剛剛的程式碼 並新增一個新的GLUT專案
並將程式碼修改為以下程式
#include <GL/glut.h>
float X=0, Y=0, Z=0;                使用global變數 (要大寫的X Y Z
void display()
{
    glClear(  GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef( X, Y, Z );        (大寫的X Y Z)
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void mouse(int button,int state, int x, int y)            (小寫x y z的參數
{
    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("Week02");

    glutMouseFunc(mouse);             (mouse函式)


    glutDisplayFunc(display);
    glutMainLoop();
}


修改完成後執行程式
用左鍵點擊空白的地方就會發現
茶壺會移動到滑鼠左鍵點擊的地方
#include <GL/glut.h>
#include <stdio.h>           printf()
float X=0, Y=0, Z=0;
void display()
{
    glClear(  GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        把中間這段程式碼刪掉
    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("Week02");

    glutMouseFunc(mouse);


    glutDisplayFunc(display);
    glutMainLoop();
}

修改後執行程式碼
並點擊黑色區域空白處
小黑視窗就會顯示出你滑鼠點的座標X Y是在哪裡
















 

沒有留言:

張貼留言