2020年3月17日 星期二

91013

複習上週茶壺程式碼😝

#include <GL/glut.h>

void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}

int main(int argc,char ** argv)
{
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");
    glutDisplayFunc(display);
    glutMainLoop();
}


增加以下黃底程式碼後

#include <GL/glut.h>
#include <stdio.h>

void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
void mouse(int button,int state, int x,int y){
    printf("%d %d %d %d\n",button,state,x,y);
}
int main(int argc,char ** argv)
{
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}



點擊後對應位置為 ( 滑鼠左0/中1/右鍵2 , 下0/上1 , x座標 , y座標 )

增加新的程式碼


#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0; ///座標-1.0 ~ +1.0
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); ///清背景
    glPushMatrix();  ///備份矩陣
        glTranslatef(teapotX,teapotY,0); ///移動
        glutSolidTeapot(0.3);
    glPopMatrix(); ///備份矩陣
    glutSwapBuffers();
}
void mouse(int button,int state, int x,int y){
    printf("%f %f\n",(x-150)/150.0, (y-150)/150.0);
    teapotX= (x-150)/150.0; ///任務: x:0~300 變成 -1~+1
    teapotY= -(y-150)/150.0; ///任務: y:300~0 變成 -1~+1
}
int main(int argc,char ** argv)
{
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}



點擊後對應位置為 ( x座標 , y座標 )
且茶壺會跟著點擊目標而移動


#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0;
void display()
{
    glClearColor(183/255.0,203/255.5,87/255.0,1);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清背景
    glBegin(GL_POLYGON);///開始畫
        glColor3f(211/255.0,180/255.0,113/255.0);
        glVertex2f((53-150)/150.0,-(143-150)/150.0);
        glVertex2f((66-150)/150.0,-(143-150)/150.0);
        glVertex2f((66-150)/150.0,-(213-150)/150.0);
    glEnd();///結束畫
    glutSwapBuffers();
}
void mouse(int button,int state, int x,int y){
    if(state==GLUT_DOWN){
        printf(" glVertex2f( (%d-150)/150.0, -(%d-150)/150.0);\n",x,y);
    }
}
int main(int argc,char ** argv)
{
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}




week03 HW


2 則留言: