2022年3月14日 星期一

week04👻

第一節:

1.去網頁https://jsyeh.org/3dcg10/

2.下載win32 和 data

3.解壓縮兩個檔案

4.將解壓縮完的data拉進windows資料夾


6.點開Transformation

完成!!!
-----------------------------------------------------------------------------------------------------------------------------
第二節
1.單個茶壺的移動
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
        glTranslated( 0.3,0.2,0);
        glColor3f(1,0,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
int main(int argc,char**argv )
{
    glutInit( &argc,  argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("HW2 bonus");

    glutDisplayFunc(display);
    glutMainLoop();
}

2.多個茶壺的移動
#include <GL/glut.h>
void myTeapot(float x,float y)
{
    glPushMatrix();
        glTranslatef(x,y,0);
        glutSolidTeapot(0.3);
        glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glColor3f(1,0,0);
    myTeapot(+0.5,+0.5);
    myTeapot(+0.5,-0.5);
    myTeapot(-0.5,-0.5);
    myTeapot(-0.5,+0.5);
    glutSwapBuffers();
}
int main(int argc,char**argv )
{
    glutInit( &argc,  argv);
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );
    glutCreateWindow("HW2 bonus");

    glutDisplayFunc(display);
    glutMainLoop();
}


3.滑鼠事件的運用
#include <GL/glut.h>
#include <stdio.h>

void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
    printf("%d %d %d\n",button,state,x,y);
}

int main(int argc, char *argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("ME");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}



-----------------------------------------------------------------------------------------------------------------------------
第三節
1.運用剛剛的座標換算,用在茶壺身上
#include <GL/glut.h>
#include <stdio.h>
int mouseX=0,mouseY=0;
void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,0); 黃色的
    glPushMatrix();口訣:減一半,除一半,Y還倒過來
        glTranslatef((mouseX-150)/150.0,-(mouseY-150)/150.0,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
   // printf("%d %d %d\n",button,state,x,y);
   mouseX=x;mouseY=y;
}

int main(int argc, char *argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("ME");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}

2.用滑鼠寫程式
#include <GL/glut.h>
#include <stdio.h>
int mouseX=0,mouseY=0 ,N=0;
int mx[100],my[100];
void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,0);
    glBegin(GL_LINE_LOOP);
        for( int i=0;i<N;i++){
            glVertex2f((mx[i]-150)/150.0,-(my[i]-150/150.0));
        }
        glEnd();
    glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
   // printf("%d %d %d\n",button,state,x,y);
   mouseX=x;mouseY=y;
   if(state==GLUT_DOWN){
    printf("  glVertex2f( (%d-150)/150.0,-(%d-150)/150.0);\n",x,y);
    N++;
    mx[N-1]=x;my[N-1]=y;
   }
}

int main(int argc, char *argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("ME");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}














沒有留言:

張貼留言