2023年3月1日 星期三

ww-week03-移動

glTranslatef(0.00,0.00,0.00);     

0.在https://jsyeh.org/3dcg10/中下載[data][win32] glut32.dll三個檔案 / 在資料夾中開啟後分別解壓縮 / 將data資料夾放到window裡

        /開啟window.Transformation.exe

    1. 備份矩陣、還原矩陣、移動:開新Project:week03-1_Translate


        /在main.cpp中更改程式碼複習上週畫出一個茶壺


        /利用備份矩陣glPushMatrix()與還原矩陣 glPopMatrix()來移動茶壺位置


#include <GL/glut.h>
void display()
{
    glPushMatrix();///備份矩陣
        glTranslatef(0.5,0,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();
}

  

    2.加入滑鼠

2-1加入mousec()函式

#include <GL/glut.h>
void display()
{
    glPushMatrix();
        glTranslatef(0.5,0,0);
        glutSolidTeapot( 0.3 );
    glPopMatrix();

glutSwapBuffers();
}
#include <stdio.h>
void mouse(int button,int state,int x,int y)
{
    printf("%d %d %d %d\n",button,state,x,y);///state按下去是0,放開是1
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03");

glutDisplayFunc(display);
glutMouseFunc(mouse);///用mouse

glutMainLoop();
}

2-2利用global 變數,在函數之間傳值,滑鼠點到哪,茶壺位置就移到哪

#include <GL/glut.h>
float X=0 ,Y=0;///利用global 變數,在函數之間傳值(大寫的) 
void display()
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glPushMatrix();
        glTranslatef( X, Y,0);
        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");

glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}

2-3 用https://gist.github.com/放入程式碼week03-2.cpp檔/放入HTML檢視中


 

    3.用滑鼠點標畫畫:

       3-1放大視窗並加入用滑鼠找標的功能 / 開新檔案

#include <GL/glut.h>
#include <stdio.h>
float X=0 ,Y=0;
void display()
{
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glPushMatrix();
        glTranslatef( X, Y,0);
        glutSolidTeapot( 0.3 );
    glPopMatrix();

glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
    float X=(x-250)/250.0;
    float Y=-(y-250)/250.0;
    if(state==GLUT_DOWN){///按下mouse時,才印出,避免有兩行一樣
        printf("   glVertex2f(%.3f, %.3f);\n",X,Y);
    }
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500,500);///放大視窗
glutCreateWindow("week03");

glutDisplayFunc(display);
glutMouseFunc(mouse);
        glutMainLoop();
}

        3-2小黑印出程式碼後,複製貼到原程式碼/ 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///初始程式

glBegin(GL_POLYGON);

(貼入)

glEnd();

glutSwapBuffers();///初始程式


#include <GL/glut.h>
#include <stdio.h>
float X=0 ,Y=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef( X, Y,0);
        glutSolidTeapot( 0.3 );
    glPopMatrix();

    glBegin(GL_POLYGON);
    glVertex2f(-0.504, -0.684);
    glVertex2f(-0.652, -0.524);
    glVertex2f(-0.700, -0.356);
    glVertex2f(-0.564, -0.272);
    glVertex2f(-0.452, -0.280);
    glVertex2f(-0.176, -0.320);
    glVertex2f(-0.144, -0.464);
    glVertex2f(-0.160, -0.576);
    glVertex2f(-0.268, -0.644);
    glVertex2f(-0.352, -0.672);
    glVertex2f(-0.504, -0.684);
    glEnd(); 
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
    float X=(x-250)/250.0;
    float Y=-(y-250)/250.0;
    if(state==GLUT_DOWN){
        printf("glVertex2f(%.3f, %.3f);\n",X,Y);
    }
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutCreateWindow("week03");

glutDisplayFunc(display);
glutMouseFunc(mouse);
    glutMainLoop();
}      

 

 

git指令
cd desktop
git clone https://github.com/你的帳號/2023graphicsa
cd 2023graphicsa
加入檔案
git add . 
git status

git config --global user.email "jsyeh@mail.mcu.edu.tw"

git config --global user.name "jsyeh"

git commit -m "week10"

git push

沒有留言:

張貼留言