2018年3月18日 星期日

Week 03 王姿

𝄞玩Shape𝄞

1.到網址:http://jsyeh.org/3dcg10  下載 data.zip, windows.zip, glut32.dll 這3個檔案
















2.解壓縮檔案,並把glut32.dll檔丟進windows裡















3.點選"Shapes.exe"


用滑鼠上下拉動,就可以調整數值大小


在圖形(左)和程式碼(右)點擊右鍵分別可以切換成不同模式


















𝄞mouse()滑鼠事件𝄞

1.將原有程式碼刪除,並打上茶壺程式碼(可複習上週week02)
2.加入可偵測滑鼠移動的程式

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

void display()
{
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     glPushMatrix();
          glTranslatef(teapotX, teapotY, 0);
          glutSolidTeapot(0.3);
     glPopMatrix();
     glutSwapBuffers();
}

void mouse(int buttom, 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 Mouse");

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













𝄞motion()滑鼠移動𝄞

1.加入滑鼠點擊茶壺時,茶壺可隨著滑鼠移動的程式

BUT!!移動茶壺後,再次點擊茶壺的任何位置時,圖會立刻跳到茶壺的正中心!

#include <GL/glut.h>
#include <stdio.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();
}

void mouse(int button,int state, int x, int y)
{
    printf("%d %d %d %d\n", button, state, x, y);
}

void motion(int x, int y)
{
     teapotX=(x-150)/150.0;
     teapotY=(150-y)/150.0;
     glutPostRedisplay();
}


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

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








沒有留言:

張貼留言