印出茶壺
#include<GL/glut.h>
#include<stdio.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
printf("button:%d state:%d x:%d y:%d\n",button,state,x,y);
}
int main( int argc, char** argv)
{
glutInit( &argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04 mouse");
glutDisplayFunc( display );
glutMouseFunc( mouse);
glutMainLoop();
}
-------------------------------------------------------------------------------------------
得知茶壺座標
得出的座標越多精細度越高
#include<GL/glut.h>
#include<stdio.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
if(state==GLUT_DOWN)
{
printf(" glVertex3f( (%d-150)/150.0, -(%d-150)/150.0, 0 );\n",x,y);
}
}
int main( int argc, char** argv)
{
glutInit( &argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04 mouse");
glutDisplayFunc( display );
glutMouseFunc( mouse);
glutMainLoop();
}
------------------------------------------------------------------------------------------------
複製茶壺
將取得的圖片加入程式碼
#include<GL/glut.h>
#include<stdio.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glutSolidTeapot(0.3);
glBegin(GL_POLYGON);
glVertex3f( (143-150)/150.0, -(114-150)/150.0, 0 );
glVertex3f( (159-150)/150.0, -(114-150)/150.0, 0 );
glVertex3f( (154-150)/150.0, -(122-150)/150.0, 0 );
glVertex3f( (182-150)/150.0, -(128-150)/150.0, 0 );
glVertex3f( (192-150)/150.0, -(149-150)/150.0, 0 );
glVertex3f( (211-150)/150.0, -(129-150)/150.0, 0 );
glVertex3f( (229-150)/150.0, -(130-150)/150.0, 0 );
glVertex3f( (205-150)/150.0, -(164-150)/150.0, 0 );
glVertex3f( (184-150)/150.0, -(185-150)/150.0, 0 );
glVertex3f( (120-150)/150.0, -(182-150)/150.0, 0 );
glVertex3f( (109-150)/150.0, -(176-150)/150.0, 0 );
glVertex3f( (81-150)/150.0, -(142-150)/150.0, 0 );
glVertex3f( (115-150)/150.0, -(136-150)/150.0, 0 );
glVertex3f( (117-150)/150.0, -(131-150)/150.0, 0 );
glVertex3f( (147-150)/150.0, -(123-150)/150.0, 0 );
glVertex3f( (142-150)/150.0, -(117-150)/150.0, 0 );
glEnd();
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
if(state==GLUT_DOWN)
{
printf(" glVertex3f( (%d-150)/150.0, -(%d-150)/150.0, 0 );\n",x,y);
}
}
int main( int argc, char** argv)
{
glutInit( &argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04 mouse");
glutDisplayFunc( display );
glutMouseFunc( mouse);
glutMainLoop();
}
-------------------------------------------------------------------------------------
#include<GL/glut.h>
#include<stdio.h>
float teapotX=0, teapotY=0;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslated( teapotX, teapotY, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glEnd();
glutSwapBuffers();
}
//void mouse(int button, int state, int x, int y)
//{
// printf("button:%d state:%d x:%d y:%d\n",button,state,x,y);
//}
void motion( int x, int y)
{
teapotX=(x-150)/150.0;
teapotY=-(y-150)/150.0;
display(); //移動顯示
}
int main( int argc, char** argv)
{
glutInit( &argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04 mouse");
glutDisplayFunc( display );
//glutMouseFunc( mouse);
glutMotionFunc( motion );
glutMainLoop();
}
------------------------------------------------------------------
3D模型控制
旋轉
依照4個參數來決定模型旋轉
glRotatef( 0(依照手指方向進行旋轉) , 0(以左右為主軸) , 0(以上下為主軸) , 0(以前後為主軸) );
數字增加朝手指方向旋轉 1為向右,0為向左 1為向上,0為向下 1為向前,0為向後
數字減少則進行反向旋轉
移動
glTranslatef( 0(左右移動) , 0(上下移動) , 0(前後移動) );
數字增加 向右移動 向上移動 向前移動
數字減少 向左移動 向下移動 向後移動
縮放
glScalef( 0(左右縮放) , 0(上下縮放) , 0(前後縮放) );
數字增加 左右放大 上下放大 前後放大
數字減少 左右縮小 上下縮小 前後縮小


沒有留言:
張貼留言