1. 範例
去https://jsyeh.org/3dcg10/
下載 data跟win32
把data丟在win32
執行 Transformation.exe
可以去玩他
下面右鍵S可以自己玩玩看
2.鍵盤輸入
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glColor3f(1 ,0,0);///顏色(RGB)
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);///把參數給glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("week05");///開GLUT視窗
glutDisplayFunc(display);///用來顯示的函式
glutKeyboardFunc(keyboard);
glutMainLoop();
}
很好玩
3.glut御三家 (移動 旋轉 縮放 )
A.移動
#include <GL/glut.h>
#include <stdio.h>
float x=150 ,y=150, z=0;
int oldX=0 ,oldY=0;
void display()
{
glClearColor(0.5 ,0.5 ,0.5, 1);///第四個是半透明功能
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();
glTranslatef((x-150)/150.0,-(y-150)/150.0,z);
glColor3f(1 ,0,0);///顏色(RGB)
glutSolidTeapot(0.3);///就一個神燈
glPopMatrix();///還原矩陣
glutSwapBuffers();///畫好提交
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
}
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);///把參數給glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("week05");///開GLUT視窗
glutDisplayFunc(display);///用來顯示的函式
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
B.縮放
#include <GL/glut.h>
#include <stdio.h>
float x=150 ,y=150, z=0, scale=1.0;
int oldX=0 ,oldY=0;
void display()
{
glClearColor(0.5 ,0.5 ,0.5, 1);///第四個是半透明功能
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();
glTranslatef((x-150)/150.0,-(y-150)/150.0,z);
glScalef(scale, scale ,scale);
glColor3f(1 ,0,0);///顏色(RGB)
glutSolidTeapot(0.3);///就一個神燈
glPopMatrix();///還原矩陣
glutSwapBuffers();///畫好提交
}
void keyboard(unsigned char key,int mouseX,int mouseY)
{
}
void mouse(int button ,int state,int mouseX,int mouseY)
{
oldX=mouseX; oldY =mouseY;///為了解決瞬間移動的問題
}
void motion(int mouseX,int mouseY)
{
if(mouseX-oldX > 0 )scale*=1.01;
if(mouseX-oldX < 0 )scale*=0.99;
oldX=mouseX; oldY=mouseY;
display();
}
int main(int argc, char** argv)///主函式 進階版 看不懂
{
glutInit( &argc, argv);///把參數給glutInit 初始化
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
glutCreateWindow("week05");///開GLUT視窗
glutDisplayFunc(display);///用來顯示的函式
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
3.gist(git的功能能分享程式碼)且blogger右上有html視略
我睡著了

沒有留言:
張貼留言