GLUT teapot
和第一週一樣照過程打開GLUT
然後把程式碼改掉改成
#include <GL/glut.h>
void display()
{
glColor3f(0,0,1);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week2");
glutDisplayFunc(display);
glutMainLoop();
}
弄出茶壺
然後改寫程式碼改成
#include <GL/glut.h>
#include <stdio.h>///為了 printf
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("%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:0...300 變成 -1...+1
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03");
glutDisplayFunc(display);///display函式
glutMouseFunc(mouse);///mouse的函式
glutMainLoop();
}
就可以使茶壺隨著滑鼠座標出現
GLUT begin_vertex
開一個新的glut
打上程式碼
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON); 開始畫
///程式產生的頂點
glEnd(); 結束畫
glutSwapBuffers();
}
void mouse(int button, int state , int x,int y)
{
if(state==GLUT_DOWN)///只有按下去時,才印出座標,減一半 除一半.0,y加負
{
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();
}
可以用滑鼠找出座標
找完座標後 複製座標在程式碼中貼上
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f( (132-150)/150.0,-(91-150)/150.0);
glVertex2f( (48-150)/150.0,-(191-150)/150.0);
glVertex2f( (254-150)/150.0,-(198-150)/150.0);
glVertex2f( (273-150)/150.0,-(62-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();
}
去小畫家選你要的顏色並知道色號
加上程式碼底色
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClearColor(164/255.0, 223/255.0, 98/255.0, 1);///上底色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
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();
}
再從程式中複製滑鼠座標
再從你要的圖案上加顏色
加上程式碼
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClearColor(164/255.0, 223/255.0, 98/255.0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3f(222/255.0, 191/255.0, 99/255.0);
glVertex2f( (64-150)/150.0,-(115-150)/150.0);
glVertex2f( (64-150)/150.0,-(182-150)/150.0);
glVertex2f( (88-150)/150.0,-(188-150)/150.0);
glVertex2f( (93-150)/150.0,-(88-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();
}








沒有留言:
張貼留言