2023年3月2日 星期四

week03 移動 translate

week03


 step01-1

下載課本範例

https://jsyeh.org/3dcg10/ 下載 win32.zip,data.zip 並解壓縮



解壓縮後把data資料夾放入window資料夾



執行 transformation.exe



step01-2 

CodeBlocks,GLUT專案,事先把freeglut裝好,改出libglut32.a

刪除177行程式貼上上週10行程式

增加程式碼

#include <GL/glut.h>

void display()

{

    glutSolidTeapot( 0.3 );

    glutSwapBuffers();

}


可以利用gist.github使程式碼的顏色更漂亮,開啟blogger改成HTML檢視模式,貼上從gist.github複製的網址



step02-1 

增加程式碼
#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();
}



step03-1

開心的專案,複製上一個專案的程式碼
增加程式碼
變成茶壺能隨著滑鼠點擊移動
#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();
}


step03-2

作業用滑鼠標出座標點畫圖
程式碼
#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 );


    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();
}

座標點前後要加 
glBegin(GL_POLYGON);
glEnd();

沒有留言:

張貼留言