2019年3月14日 星期四

06160494。電腦圖學-MOVE

檔案網址:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
下載:WIN32DATAGLUT32.DLL
壓縮在同一個資料夾(WINDOWS要包含DATAGLUT32.DLL)





檔案:TRANSFORMATION(變形)

第一條
             一:左右。二:上下。三:前後。
第二條:旋轉角度。
第三條:物件的XYZ大小
右鍵可以RESET。











P.S 注意壓縮的DATA檔案。不要有兩層DATA,會有讀不到造成的閃退問題。


開啟CODEBLOCK的GLUT專案。需要FREEGLUT-MINGW.ZIP檔案。可以在FREEGLUT WINDOW的網站中找到。
找到

freeglut 3.0.0 MinGW Package

Download
freeglut 3.0.0 for MinGW
 壓縮檔案,在LIB裡面複製LIBFREEGLUT,貼上改成LIBGLUT32











開啟CODEBLOCK。FILE(左上角)->NEW->PROJECT->GLUT PROJECT->(命名檔案)->下一步->路徑改成FREEGLUT資料夾的路徑。.
















把程式碼改成
#include<GL/glut.h>
void display()
{
    glPushMatrix();//copy矩陣
        glTranslatef(0.3,0.3,0);//移動 (改變矩陣)
        glutSolidTeapot(0.3);
    glPopMatrix();//還原矩陣
    glutSwapBuffers();
}
int main(int argc,char**argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("WEEK04");
    glutDisplayFunc(display);
    glutMainLoop();
}
示意圖


















以上的缺點,參數訂死無法移動。故更新之後。
#include<GL/glut.h>
float x=150,y=150;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();//copy矩陣
        glTranslatef((x-150)/150.0,-(y-150)/150.0,0);//移動 (改變矩陣),會根據讀到的值改變
        glutSolidTeapot(0.3);
        ///glVertex2f((X-150)/150.0,-(y-150)/150.0,0);
    glPopMatrix();//還原矩陣
    glutSwapBuffers();
}
void mouseMOVE(int nowX,int nowY)//滑鼠MOTION(動作)
{
    x=nowX;//滑鼠MOTION(動作)
    y=nowY;//滑鼠MOTION(動作)
    display();//滑鼠動作馬上更新
}
int main(int argc,char**argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("WEEK04");
    glutDisplayFunc(display);
    glutMotionFunc(mouseMOVE);//滑鼠動作馬上動作(所以需要按住左鍵)
    glutMainLoop();
}
將能夠按著左鍵後,跟著滑鼠一起動。


沒有留言:

張貼留言