2022年3月8日 星期二

哈囉你好嗎隨便week03


1. 範例 


去https://jsyeh.org/3dcg10/
下載 data跟win32
把data丟在win32
執行 Transformation.exe
可以去玩他



2 茶壺

#include <GL/glut.h> ///使用GLUT外掛,簡化程式
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///畫圖前, 先清畫面

    glPushMatrix();///備份矩陣(備份舊的位置)
        ///移動會累積,因為它會修改矩陣
        glTranslatef(0.5,0.5,0);///右上角
        glColor3f(1,1,0);///黃色
        glutSolidTeapot(0.3);///茶壺
    glPopMatrix();///還原矩陣

    glutSwapBuffers();///畫好後,交換出來
}

int main(int argc, char** argv) ///main()主函式 進階版
{
    glutInit( &argc, argv); ///把參數,送給 glutInit 初始化
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); ///雙緩衡區 + 3D深度功能
    glutCreateWindow("第02週的程式"); ///開 GLUT 視窗

    glutDisplayFunc(display); ///用來顯示的函式

    glutMainLoop(); ///主要的程式迴圈
}




3.四個茶壺

#include <GL/glut.h>


void myTeapot(float x,float y)

{

///    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面

    glPushMatrix();///備份舊的位置

        ///移動會累積,因為它會修改矩陣

        glTranslatef(x,y,0);///右上角

        glColor3f(1,1,0);///顏色(RGB)

        glutSolidTeapot(0.3);///就一個神燈

    glPopMatrix();///還原矩陣


}

void display()

{

     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

     myTeapot(0.5,0.5);

     myTeapot(0.5,-0.5);

     myTeapot(-0.5,-0.5);

     myTeapot(-0.5,0.5);

     glutSwapBuffers();

}

int main(int argc, char** argv)///主函式 進階版 看不懂

{

    glutInit( &argc, argv);///把參數給glutInit 初始化

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能

    glutCreateWindow("week03-移動");///開GLUT視窗


    glutDisplayFunc(display);///用來顯示的函式


    glutMainLoop();



4.讓茶壺跟者我的滑鼠動

#include <GL/glut.h>
float mouseX=0, mouseY=0;
void myTeapot(float x,float y)
{
///    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
    glPushMatrix();///備份舊的位置
        ///移動會累積,因為它會修改矩陣
        glTranslatef(x,y,0);///右上角
        glColor3f(1,1,0);///顏色(RGB)
        glutSolidTeapot(0.3);///就一個神燈
    glPopMatrix();///還原矩陣

}
void display()
{
     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     myTeapot((mouseX-150)/150.0,-(mouseY-150)/150.0);
     glutSwapBuffers();
}
void mouse (int button, int state , int x,int y )
{
    mouseX=x; mouseY=y;
}
int main(int argc, char** argv)///主函式 進階版 看不懂
{
    glutInit( &argc, argv);///把參數給glutInit 初始化
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );///雙緩衝區+3D深度功能
    glutCreateWindow("week03-移動");///開GLUT視窗

    glutDisplayFunc(display);
    glutMouseFunc(mouse);

    glutMainLoop();
}
超酷

5.會幫到你
#include <GL/glut.h> ///使用GLUT外掛,簡化程式 #include <stdio.h> float mouseX=0, mouseY=0; void myTeapot(float x, float y){ glPushMatrix();///備份矩陣(備份舊的位置) ///移動會累積,因為它會修改矩陣 glTranslatef(x,y,0);///右上角 glColor3f(1,1,0);///黃色 glutSolidTeapot(0.1);///茶壺 glPopMatrix();///還原矩陣 } void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///畫圖前, 先清畫面 myTeapot((mouseX-150)/150.0,-(mouseY-150)/150.0) ; glutSwapBuffers();///畫好後,交換出來 } void mouse(int button, int state, int x, int y){ printf("%d %d %d %d", button, state, x, y); mouseX=x; mouseY=y; } int main(int argc, char** argv) ///main()主函式 進階版 { glutInit( &argc, argv); ///把參數,送給 glutInit 初始化 glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); ///雙緩衡區 + 3D深度功能 glutCreateWindow("第03週的程式:利用滑鼠移動)"); ///開 GLUT 視窗 glutDisplayFunc(display); ///用來顯示的函式 glutMouseFunc(mouse); glutMainLoop(); ///主要的程式迴圈 }
褚崇信已在下午12:04看過
進入
撰寫內容給褚崇信






沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

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