1.
電腦圖學之父:Ivan Sutherland
2.
執行模型時,若朝模型下方按右鍵會出現swap translate/rotate,可改變模型是公轉(rotate_以場景為中心)或自轉(translate_以模型為中心)
3.
4.茶壺可用滑鼠拖動
#include <stdio.h>
float x=0,y=0,z=0,oldX,oldY;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef((x-150)/150.0,-(y-150)/150.0,z);///移動
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
printf("現在按下:%c 座標在:%d %d\n",key,x,y);///滑鼠到哪,且按下鍵盤任意按鍵就會印出哪的座標
}
void mouse(int button, int state,int mouseX,int mouseY)
{
oldX=mouseX;
oldY=mouseY;
}
void motion(int mouseX,int mouseY)
{
x+=(mouseX-oldX);
y+=(mouseY-oldY);
oldX=mouseX;
oldY=mouseY;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
5.用滑鼠拖動可放大縮小
完整程式碼:
#include <GL/glut.h>
#include <stdio.h>
float x=0,y=0,z=0,scale=1.0,oldX,oldY;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glScalef(scale,scale,scale);///放大縮小
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
printf("現在按下:%c 座標在:%d %d\n",key,x,y);///滑鼠到哪,且按下鍵盤任意按鍵就會印出哪的座標
}
void mouse(int button, int state,int mouseX,int mouseY)
{
oldX=mouseX;
oldY=mouseY;
}
void motion(int mouseX,int mouseY)
{
/*x+=(mouseX-oldX);
y+=(mouseY-oldY);*/
if(mouseX>oldX)scale=scale*1.01;
if(mouseX<oldX)scale=scale*0.99;
oldX=mouseX;
oldY=mouseY;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
6.用鍵盤控制茶壺
#include <GL/glut.h>
#include <stdio.h>
float x=0,y=0,z=0,scale=1.0,angle=0.0,oldX,oldY;
int now=1;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef((x-150)/150.0,-(y-150)/150.0,z);
glScalef(scale,scale,scale);
glRotatef(angle,0,0,1);
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
if(key=='w'||key=='W')now=1;///移動
if(key=='e'||key=='E')now=2;///旋轉
if(key=='r'||key=='R')now=3;///縮放
}
void mouse(int button, int state,int mouseX,int mouseY)
{
oldX=mouseX;
oldY=mouseY;
}
void motion(int mouseX,int mouseY)
{
/*x+=(mouseX-oldX);
y+=(mouseY-oldY);*/
if(mouseX>oldX)scale=scale*1.01;
if(mouseX<oldX)scale=scale*0.99;
oldX=mouseX;
oldY=mouseY;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
7.




沒有留言:
張貼留言