2022年3月15日 星期二

week04

 這周我們一開始還是先去下載data和win32資料夾

打開裡面的transform.exe


這次我們上課要教的是這裡面的Rotate旋轉
如果我們調整的是X軸
圖中模型就會往前後轉動
Y軸則是往左右轉動 但是會面向左右邊轉動
而Z軸則是一樣往左右 但人物是會保持正向並往左右邊倒
而如果我們一次調整XYZ三個軸 人物就會往斜向轉動


所以我們先打開CodeBlocks,把之前教的精簡10行程式複製上來

加上glRotatef()看看旋轉的效果



接著我們可以加上上周教的mouse程式 讓他會隨著滑鼠旋轉



#include <GL/glut.h>///使用GLUT外掛簡化程式
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///畫圖前先清畫面
    glPushMatrix();
        glRotatef(angle,0,0,1);
        glutSolidTeapot(0.3);///實心的茶壺
    glPopMatrix();
    glutSwapBuffers();///畫好後交換出來
}
void motion(int x,int y)
{
    angle=x;
    display();
}
int main(int argc,char** argv)///main()主函式 進階版
{
    glutInit(&argc,argv);///把參數送給glutInit初始化
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///雙緩衝區+3D深度功能
    glutCreateWindow("week02_1");///開GLUT視窗

    glutDisplayFunc(display);///用來顯示的函式
    glutMotionFunc(motion);
    glutMainLoop();///主要的程式迴圈
}



#include <GL/glut.h>///使用GLUT外掛簡化程式
float angle=0,oldX=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///畫圖前先清畫面
    glPushMatrix();
        glRotatef(angle,0,0,1);
        glutSolidTeapot(0.3);///實心的茶壺
    glPopMatrix();
    glutSwapBuffers();///畫好後交換出來
}
void motion(int x,int y)
{
    angle+=(x-oldX);
    oldX=x;
    display();
}
void mouse(int button,int state,int x,int y)
{
    oldX=x;///定錨
}
int main(int argc,char** argv)///main()主函式 進階版
{
    glutInit(&argc,argv);///把參數送給glutInit初始化
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);///雙緩衝區+3D深度功能
    glutCreateWindow("week02_1");///開GLUT視窗

    glutDisplayFunc(display);///用來顯示的函式
    glutMotionFunc(motion);///mouse motion動
    glutMouseFunc(mouse);///上周教:mouse按下去、放開來
    glutMainLoop();///主要的程式迴圈
}









沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...