影片介紹:https://www.youtube.com/watch?v=6orsmFndx_o
了解電腦圖學的發展與介紹
老師的範例網址:https://jsyeh.org/3dcg10/
鍵盤操縱顯示座標
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
printf("現在按下:%c 座標在:%d %d\n",key,x,y);
}
int main(int argc,char**argv)
{
glutInit(&argc, argv);///初始化
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
加入移動等操縱
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
printf("現在按下:%c 座標在:%d %d\n",key,x,y);
}
void mouse(int button, int state,int x,int y)
{
}
void motion(int x,int y)
{
}
int main(int argc,char**argv)
{
glutInit(&argc, argv);///初始化
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
return 0;
}
移動的寫法
#include <GL/glut.h>
#include <stdio.h>
float x=0,y=0,z=0,oldx,oldy;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///push備份矩陣
glTranslatef( (x-150)/150.0 , -(y-150)/150.0 , z );///移動,Maya按鍵裡面的:w
///glRotatef( angle , 0 , 0 , 1);///旋轉
///glScalef( scale , scale ,scale );///縮放
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();///pop還原矩陣
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
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_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
return 0;
}
學習縮放吧~
#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();///push備份矩陣
///glTranslatef( (x-150)/150.0 , -(y-150)/150.0 , z );///移動,Maya按鍵裡面的:w
///glRotatef( angle , 0 , 0 , 1);///旋轉
glScalef( scale , scale ,scale );///縮放,Maya按鍵裡面的:r
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();///pop還原矩陣
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
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)
{
if(mousex>oldx) scale = scale * 1.01;///滑鼠向右移動,茶壺就會放大
if(mousex<oldx) scale = scale * 0.99;///滑鼠向左移動,除茶壺就會縮小
///x += (mousex-oldx);
///y += (mousey-oldy);
oldx = mousex;
oldy = mousey;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc, argv);///初始化
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
把鍵盤的功能加入,可讓茶壺進行移動或是縮放
#include <GL/glut.h>
#include <stdio.h>
float x=0,y=0,z=0,scale=1.0,oldx,oldy;
int now=1;///1.移動,2.旋轉,3.縮放
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///push備份矩陣
glTranslatef( (x-150)/150.0 , -(y-150)/150.0 , z );///移動,Maya按鍵裡面的:w
///glRotatef( angle , 0 , 0 , 1);///旋轉
glScalef( scale , scale ,scale );///縮放,Maya按鍵裡面的:r
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();///pop還原矩陣
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
///printf("現在按下:%c 座標在:%d %d\n",key,x,y);
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)
{
if(now==1)
{
x += (mousex-oldx);///x移動的座標
y += (mousey-oldy);///y移動的座標
}
else if(now==3)
{
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_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
#include <GL/glut.h>
#include <stdio.h>
float x=250,y=250,z=0,scale=1.0,angle=0.0,oldx,oldy;
int now=1;///1.移動,2.旋轉,3.縮放
void display()
{
glClearColor( 0.5, 0.5 , 0.5 , 1 );///用來Clear的色彩,R,G,B,A Alpha沒用到
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///push備份矩陣
glTranslatef( (x-250)/250.0 , -(y-250)/250.0 , z );///移動,Maya按鍵裡面的:w
glRotatef( angle , 0 , 0 , 1);///旋轉,Maya按鍵裡面的:e
glScalef( scale , scale ,scale );///縮放,Maya按鍵裡面的:r
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glPopMatrix();///pop還原矩陣
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
///printf("現在按下:%c 座標在:%d %d\n",key,x,y);
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)
{
if(now==1)
{
x += (mousex-oldx);///x移動的座標
y += (mousey-oldy);///y移動的座標
}
else if(now==2)
{
angle += (mousex-oldx);
}
else if(now==3)
{
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_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500,500);///視窗的大小
glutCreateWindow("Week06 keyboard");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}








沒有留言:
張貼留言