2022年3月8日 星期二

一定是大拇指的啦

 step 1 : 下載資料

1.1 到https://jsyeh.org/3dcg10 下載 data  , window32

1.2 windows.zip  =壓縮=>  下載/windows/Shapes.exe

     data.zip =壓縮=> 下載windows/data
     glut32.dll ==> 下載/windows/glut32.dll
    下載完後將 data 放入 windows 資料夾

1.3 執行Transformation.exe


         

      (右上角) 右鍵換模型

      (下方) 拖曳綠色的數值



step 2  :   開啟上周茶壺

 2.0 下載  freeglut.zip 並解壓縮至桌面
        桌面 freeglut 的 lib 裡面有 libfreeglut.a 把它複製貼上並改成 libglut32.a  
 
 2.1  開啟OPENGL檔案  命名week03_translate
 
 2.2  貼上上週茶壺程式碼
#include <GL/glut.h>///使用glut的外掛
void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glColor3f(1,1,0);///設定色彩
    glutSolidTeapot(0.3);///實心的茶壺

    glutSwapBuffers();///畫好後交換出來
}
int main(int argc , char** argv) ///main主函式進階版
{
    glutInit( &argc , argv);///把參數送給glut初始化
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); ///雙緩衝區 + 3D深度功能
    glutCreateWindow("第02周的程式哦!");///開啟glut視窗

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

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

2.3 新增可移動的程式碼 (/*代表新增)
#include <GL/glut.h>
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)
{
    glutInit(&argc , argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03 移動");
    glutDisplayFunc(display);
    glutMainLoop();
}

2.4  新增函式 讓四角都有茶壺 (/*代表新增)
#include <GL/glut.h>
void MyTeapot( float x ,float y)
{
    glPushMatrix();///備份矩陣( 備份舊的位置 )
        ///移動會累積 因為他會修改矩陣
    /*glTranslatef( x , y , 0);*/  ///自定義x, y軸 位置
        glColor3f(1,1,0);///黃色
        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);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03 移動");
    glutDisplayFunc(display);
    glutMainLoop();
}

step 3: 滑鼠改變位置

3.1 新增程式碼 (/*代表新增) (滑鼠點擊即可移動位置)
#include <GL/glut.h>
/*float mouseX=0 , mouseY=0;*/  /// 設定滑鼠位置的初始值
void MyTeapot( float x ,float y)
{
    glPushMatrix();///備份矩陣( 備份舊的位置 )
        ///移動會累積 因為他會修改矩陣
        glTranslatef( x , y , 0);
        glColor3f(1,1,0);///黃色
        glutSolidTeapot(0.3);///茶壺

    glPopMatrix();///(還原舊的位置)
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    /*MyTeapot( ( mouseX-150)/150.0 , -(mouseY-150)/150.0 );*/   
    ///將滑鼠位置的座標 換算成3D的位置座標 
    ///視窗預設 300*300    口訣 :  減一半 , 除一半  , Y軸是相反
    glutSwapBuffers();
}
/*void mouse ( int button , int state , int x , int y)
{
    mouseX=x;   ///滑鼠位置的x
    mouseY=y;   ///滑鼠位置的y
}*/
int main(int argc, char** argv)
{
    glutInit(&argc , argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03 移動");
    glutDisplayFunc(display);
   /* glutMouseFunc(mouse);*/  ///滑鼠用
    glutMainLoop();
}


3.2 新增可列印滑鼠座標的程式碼(
/*代表新增)
#include <GL/glut.h>
/*#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 \n",button , state , x , y);*/  ///印出滑鼠點擊壓住跟放開的座標位置
    mouseX=x;
    mouseY=y;
}
int main(int argc, char** argv)
{
    glutInit(&argc , argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week03 移動");
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutMainLoop();
}

step 4 :  利用小畫家幫忙找顏色 、 找位置

4.1  (示範程式碼) 調顏色
void MyTeapot( float x ,float y)
{
    glPushMatrix();///備份矩陣( 備份舊的位置 )
        ///移動會累積 因為他會修改矩陣
        glTranslatef( x , y , 0);
        glColor3f( R/255.0 , G/255.0 , B/255.0 );    ///RGB可透過小畫家查
        glutSolidTeapot(0.1);///茶壺

    glPopMatrix();///(還原舊的位置)
}

4.2 (示範程式碼) 找位置
void mouse ( int button , int state , int x , int y)
{
   printf("  glVertex2f(  (%d-150)/150.0  ,  -(%d-150)/150.0 ); \n", x , y );///找出滑鼠點擊位置
    mouseX=x;
    mouseY=y;
}

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

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