2018年3月12日 星期一

茄子最好吃 week03

1.複習點線面(程式)
#include <GL/glut.h>
void display()
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//兩種模式(顏色/深度)
    glutSolidTeapot(0.3);//茶壺
    glutSwapBuffers();//交換畫面會顯示圖案
}

int main(int argc, char**argv)//進階的參數(個數,字串)
{
    glutInit(&argc, argv);//進階main 初始GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);//兩種模式開啟
    glutCreateWindow("Week03 Mouse操作");
    glutDisplayFunc(display);呼叫上面的display函式
    glutMainLoop();
}

#如果要改背景顏色 glClearColor(R,G,B,A); (貼在glCrear上面)


2.加上Mouse功能
#include <GL/glut.h>
void display()
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//兩種模式(顏色/深度)
    glutSolidTeapot(0.3);//茶壺
    glutSwapBuffers();//交換畫面會顯示圖案
}
#include <stdio.h>
void mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN) printf("glVertex2f(%f, %f);\n",(x-150)/150.0,-(y-150)/150.0);//顯示座標


int main(int argc, char**argv)//進階的參數(個數,字串)
{
    glutInit(&argc, argv);//進階main 初始GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);//兩種模式開啟
    glutCreateWindow("Week03 Mouse操作");
    glutMouseFunc(mouse);//使用滑鼠
    glutDisplayFunc(display);呼叫上面的display函式
    glutMainLoop();
}


3.滑鼠移動茶壺
#include <GL/glut.h>
float teapotX=0, teapotY=0;
void display()
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//兩種模式(顏色/深度)

    glPushMatrix(); //備份矩陣
        glTranslatef(teapotX,teapotY,0);
        glutSolidTeapot(0.3);//茶壺
    glPopMatrix(); //還原矩陣
    glutSwapBuffers();//交換畫面會顯示圖案
}
#include <stdio.h>
void mouse(int button,int state,int x,int y)
{
    if(state==GLUT_DOWN) printf("glVertex2f(%f, %f);\n",(x-150)/150.0,-(y-150)/150.0);//顯示座標

}
void motion(int x,int y)
{
    teapotX=(x-150)/150.0; teapotY= -(y-150)/150.0; //將滑鼠位置設為茶壺的位置
    printf("%d %d\n",x,y); 印出移動中的數字
    glutPostRedisplay(); 重畫畫面Redisplay
}
int main(int argc, char**argv)//進階的參數(個數,字串)
{
    glutInit(&argc, argv);//進階main 初始GLUT
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);//兩種模式開啟
    glutCreateWindow("Week03 Mouse操作");
    glutMouseFunc(mouse);
    glutDisplayFunc(display);//使用滑鼠
    glutMotionFunc(motion);呼叫上面的display函式
    glutMainLoop();
}


沒有留言:

張貼留言