今天進度:
剛開始要複習上周進度,然後畫圖
#include<GL/glut.h>
void a()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
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");
glutDisplayFunc(a);
glutMainLoop();
}
基本架構給自己方便複製。
基本茶壺
接著要加入滑鼠mouse程式
glutMouseFunc(m); m為滑鼠程式,
b:按鍵,左鍵為0,中鍵為1,右鍵為2
c:按下與放開,分別為0/1
x:X座標
y:Y座標
void a()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 清理畫面
glPushMatrix();備份矩陣
glTranslatef(teapotX,teapotY,0);移動
glutSolidTeapot(0.3);
glPopMatrix();備份矩陣
glutSwapBuffers();
}
void m(int b,int c,int x,int y)
{
printf("X:%f Y:%f\n",(x-150)/150.0,-(y-150)/150.0);
teapotX=(x-150)/150.0;轉換座標
teapotY=-(y-150)/150.0;轉換座標
}
這段程式可以畫出圖,滑鼠點會顯示點的座標
void a()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f((25-150)/150.0,-(60-150)/150.0);
glVertex2f((122-150)/150.0,-(145-150)/150.0);
glVertex2f((123-150)/150.0,-(30-150)/150.0);
glEnd();
glutSwapBuffers();
}
XY座標點轉換原理:
0...150...300
減150 -150...0...150
除150.0 -1...0...+1
void a()
{
float r,pi=3.1415926;
glBegin(GL_POLYGON);
glColor3ub(255,204,77);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (150-150)/150.0+cos(angle), -(150-150)/150.0 + sin(angle) );
}
glEnd();///face
glBegin(GL_POLYGON);
r=116.0/150.0;
glColor3ub(102,69,0);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (150-150)/150.0+r*cos(angle), -(150-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=116.0/150.0;
glColor3ub(255,204,77);
for(float angle=0; angle<=pi; angle+=0.01){
glVertex2f( (150-150)/150.0+r*cos(angle), -(150-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=30.0/150.0;
glColor3ub(255,255,255);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (150-150)/150.0+r*2.8*cos(angle), -(195-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=30.0/150.0;
glColor3ub(102,69,0);
for(float angle=0; angle<=pi; angle+=0.01){
glVertex2f( (150-150)/150.0+r*2.8*cos(angle), -(195-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
glColor3ub(255,204,77);
glVertex2f(-0.84,-0.22);
glVertex2f(0.84,-0.22);
glVertex2f(0.84,0.08);
glVertex2f(-0.84,0.08);
glEnd();///mouth
glBegin(GL_POLYGON);
r=55.0/150.0;
glColor3ub(102,69,0);
for(float angle=0; angle<=pi; angle+=0.01){
glVertex2f( (71-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=49.0/150.0;
glColor3ub(255,204,77);
for(float angle=0; angle<=pi; angle+=0.01){
glVertex2f( (71-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=55.0/150.0;
glColor3ub(102,69,0);
for(float angle=0; angle<=pi; angle+=0.01){
glVertex2f( (228-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=49.0/150.0;
glColor3ub(255,204,77);
for(float angle=0; angle<=pi; angle+=0.01){
glVertex2f( (228-150)/150.0+r*cos(angle), -(161-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
glColor3ub(255,204,77);
glVertex2f(-0.9,-0.08);
glVertex2f(-0.9,0.04);
glVertex2f(0.9,0.05);
glVertex2f(0.9,-0.08);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(255,204,77);
glVertex2f(-0.5,0.02);
glVertex2f(-0.5,0.3);
glVertex2f(-0.9,0.3);
glVertex2f(-0.9,0.02);
glEnd();
glBegin(GL_POLYGON);
glColor3ub(255,204,77);
glVertex2f(0.9,0.05);
glVertex2f(0.5,0.05);
glVertex2f(0.5,0.3);
glVertex2f(0.9,0.3);
glEnd();
glBegin(GL_POLYGON);
r=42.0/150.0;
glColor3ub(93,173,236);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (55-150)/150.0+r*0.8*cos(angle), -(210-150)/150.0 +1.3*r*sin(angle) );
}
glEnd();///t1
glBegin(GL_POLYGON);
r=42.0/150.0;
glColor3ub(93,173,236);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (245-150)/150.0+r*0.8*cos(angle), -(210-150)/150.0 +1.3*r*sin(angle) );
}
glEnd();///t2
glBegin(GL_POLYGON);
r=34.0/150.0;
glColor3ub(255,255,255);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (78-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=15.0/150.0;
glColor3ub(102,69,0);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (78-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
}
glEnd();///eye1
glBegin(GL_POLYGON);
r=34.0/150.0;
glColor3ub(255,255,255);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (219-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
}
glEnd();
glBegin(GL_POLYGON);
r=15.0/150.0;
glColor3ub(102,69,0);
for(float angle=0; angle<=pi*2; angle+=0.01){
glVertex2f( (219-150)/150.0+r*cos(angle), -(149-150)/150.0 +r*sin(angle) );
}
glEnd();///eye2
glutSwapBuffers();
}







沒有留言:
張貼留言