----------------------------------------
Week03
(1)複習(點線面、顏色)
(2)評分介紹:(HW1、HW2)、Q&A
(3)主題:滑鼠(mouse)、鍵盤(keyboard)
(4)主題:移動
----------------------------------------
Homework-1
複習上週作業
開啟CodeBlocks->File->New->Project->GLUT
點線面 畫 天婦羅貼圖
利用小畫家 找顏色、點的位置

--------------------------------------------------------------------------------------------------------------------------
#include <GL/glut.h>
static void display()
{
glClearColor(255/255.0,218/255.0,185/255.0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3ub(0,0,0);
glVertex2f((132-150)/150.0,-(53-150)/150.0);
glVertex2f((131-150)/150.0,-(44-150)/150.0);
glVertex2f((137-150)/150.0,-(35-150)/150.0);
glVertex2f((139-150)/150.0,-(26-150)/150.0);
glVertex2f((130-150)/150.0,-(23-150)/150.0);
glVertex2f((117-150)/150.0,-(25-150)/150.0);
glVertex2f((108-150)/150.0,-(31-150)/150.0);
glVertex2f((114-150)/150.0,-(56-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(0,0,0);
glVertex2f((108-150)/150.0,-(31-150)/150.0);
glVertex2f((90-150)/150.0,-(27-150)/150.0);
glVertex2f((83-150)/150.0,-(32-150)/150.0);
glVertex2f((89-150)/150.0,-(42-150)/150.0);
glVertex2f((98-150)/150.0,-(51-150)/150.0);
glVertex2f((121-150)/150.0,-(53-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(0,0,0);
glVertex2f((98-150)/150.0,-(50-150)/150.0);
glVertex2f((138-150)/150.0,-(55-150)/150.0);
glVertex2f((91-150)/150.0,-(68-150)/150.0);
glVertex2f((86-150)/150.0,-(88-150)/150.0);
glVertex2f((68-150)/150.0,-(123-150)/150.0);
glVertex2f((65-150)/150.0,-(137-150)/150.0);
glVertex2f((67-150)/150.0,-(150-150)/150.0);
glVertex2f((80-150)/150.0,-(164-150)/150.0);
glVertex2f((97-150)/150.0,-(171-150)/150.0);
glVertex2f((121-150)/150.0,-(174-150)/150.0);
glVertex2f((112-150)/150.0,-(199-150)/150.0);
glVertex2f((117-150)/150.0,-(218-150)/150.0);
glVertex2f((128-150)/150.0,-(225-150)/150.0);
glVertex2f((130-150)/150.0,-(238-150)/150.0);
glVertex2f((136-150)/150.0,-(234-150)/150.0);
glVertex2f((141-150)/150.0,-(221-150)/150.0);
glVertex2f((162-150)/150.0,-(222-150)/150.0);
glVertex2f((165-150)/150.0,-(240-150)/150.0);
glVertex2f((176-150)/150.0,-(222-150)/150.0);
glVertex2f((173-150)/150.0,-(206-150)/150.0);
glVertex2f((162-150)/150.0,-(179-150)/150.0);
glVertex2f((186-150)/150.0,-(177-150)/150.0);
glVertex2f((218-150)/150.0,-(170-150)/150.0);
glVertex2f((238-150)/150.0,-(155-150)/150.0);
glVertex2f((243-150)/150.0,-(134-150)/150.0);
glVertex2f((235-150)/150.0,-(117-150)/150.0);
glVertex2f((211-150)/150.0,-(99-150)/150.0);
glVertex2f((176-150)/150.0,-(81-150)/150.0);
glVertex2f((156-150)/150.0,-(72-150)/150.0);
glVertex2f((147-150)/150.0,-(65-150)/150.0);
glVertex2f((138-150)/150.0,-(55-150)/150.0);
glVertex2f((132-150)/150.0,-(49-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(255,227,105);
glVertex2f((83-150)/150.0,-(106-150)/150.0);
glVertex2f((149-150)/150.0,-(97-150)/150.0);
glVertex2f((192-150)/150.0,-(101-150)/150.0);
glVertex2f((216-150)/150.0,-(107-150)/150.0);
glVertex2f((229-150)/150.0,-(118-150)/150.0);
glVertex2f((239-150)/150.0,-(132-150)/150.0);
glVertex2f((231-150)/150.0,-(148-150)/150.0);
glVertex2f((192-150)/150.0,-(156-150)/150.0);
glVertex2f((150-150)/150.0,-(156-150)/150.0);
glVertex2f((111-150)/150.0,-(154-150)/150.0);
glVertex2f((86-150)/150.0,-(147-150)/150.0);
glVertex2f((69-150)/150.0,-(137-150)/150.0);
glVertex2f((72-150)/150.0,-(124-150)/150.0);
glVertex2f((83-150)/150.0,-(106-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(0,0,0);
glVertex2f((129-150)/150.0,-(116-150)/150.0);
glVertex2f((128-150)/150.0,-(115-150)/150.0);
glVertex2f((130-150)/150.0,-(119-150)/150.0);
glVertex2f((134-150)/150.0,-(115-150)/150.0);
glVertex2f((130-150)/150.0,-(114-150)/150.0);
glVertex2f((133-150)/150.0,-(116-150)/150.0);
glVertex2f((132-150)/150.0,-(119-150)/150.0);
glVertex2f((127-150)/150.0,-(115-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(0,0,0);
glVertex2f((194-150)/150.0,-(113-150)/150.0);
glVertex2f((198-150)/150.0,-(111-150)/150.0);
glVertex2f((201-150)/150.0,-(114-150)/150.0);
glVertex2f((199-150)/150.0,-(115-150)/150.0);
glVertex2f((195-150)/150.0,-(116-150)/150.0);
glVertex2f((199-150)/150.0,-(116-150)/150.0);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(237,28,36);
glVertex2f((145-150)/150.0,-(129-150)/150.0);
glVertex2f((151-150)/150.0,-(135-150)/150.0);
glVertex2f((161-150)/150.0,-(138-150)/150.0);
glVertex2f((175-150)/150.0,-(139-150)/150.0);
glVertex2f((188-150)/150.0,-(129-150)/150.0);
glEnd();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc , argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT Shapes");
glutDisplayFunc(display);
glutMainLoop();
return EXIT_SUCCESS;
}
--------------------------------------------------------------------------------------------------------------------------
Homework-2
*開啟CodeBlocks->File->New->Project->GLUT
--------------------------------------------------------------------------------------------------------------------------
#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);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03 Mouse操作");
glutDisplayFunc(display);
glutMainLoop();
}

--------------------------------------------------------------------------------------------------------------------------
*修改背景、茶壺顏色
--------------------------------------------------------------------------------------------------------------------------
#include <GL/glut.h>
void display()
{
glClearColor(1,1,0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03 Mouse操作");
glutDisplayFunc(display);
glutMainLoop();
}
--------------------------------------------------------------------------------------------------------------------------
*滑鼠點擊出現座標
--------------------------------------------------------------------------------------------------------------------------
#include <GL/glut.h>
void display()
{
glClearColor(1,1,0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
#include <stdio.h>
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 Mouse操作");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}

--------------------------------------------------------------------------------------------------------------------------
*修改跑出 glVertex2f(%f , %f );
--------------------------------------------------------------------------------------------------------------------------
#include <GL/glut.h>
void display()
{
glClearColor(1,1,0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
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);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03 Mouse操作");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
--------------------------------------------------------------------------------------------------------------------------
*加上motion函式
--------------------------------------------------------------------------------------------------------------------------
#include <GL/glut.h>
void display()
{
glClearColor(1,1,0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
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);
}
void motion(int x, int y)
{
printf("%d %d\n", x, y);
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03 Mouse操作");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
--------------------------------------------------------------------------------------------------------------------------
*像Google地圖一樣拖曳的效果
--------------------------------------------------------------------------------------------------------------------------
#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();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03 Mouse操作");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
--------------------------------------------------------------------------------------------------------------------------




沒有留言:
張貼留言