顯示具有 week12 標籤的文章。 顯示所有文章
顯示具有 week12 標籤的文章。 顯示所有文章

2021年6月7日 星期一

電腦圖學 week 12

 1. 3D Explorer安裝, 

   解壓、開Gundam 的 OBJ檔

   SaveAs .cpp檔(SampleAPP)







2. CodeBlocks開OpenGL專案

2.1. main.c換 gundam_3dexp.cpp

    (放同目錄裡) 切換 Remove, Add

2.2. Build & Run, 有錯誤

    #define GL_BGR_EXT 0x80E0 

    #define GL_BGRA_EXT 0x80E1

    //再註解 Palette的2行


3. 把它的旋轉、縮放, 換我們的

   glRotatef( nAngle, 0, 1, 0 );

   glScalef( 3, 3, 3);


4. 開啟 Maya, Import 模型

   選取你要的 Faces, Export Selection

   要 OBJexport 匯成 .obj .mtl檔



5. HW4如何寫

5.1. GLUT專案, 把打光弄好

#include <GL/glut.h>

void display()

{

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    glutSolidTeapot( 0.3 );

    glutSwapBuffers();

}

///下面是從 GLUT專案main.cpp剪貼來的

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };

const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };


const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };

const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };

const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat high_shininess[] = { 100.0f };


int main( int argc, char** argv )

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);

    glutCreateWindow("week12 hw4");


    glutDisplayFunc(display);


    ///下面是從 GLUT專案main.cpp剪貼來的

    glEnable(GL_DEPTH_TEST);

    glDepthFunc(GL_LESS);


    glEnable(GL_LIGHT0);

    glEnable(GL_NORMALIZE);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);


    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);

    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);

    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

    glLightfv(GL_LIGHT0, GL_POSITION, light_position);


    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);

    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);

    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);

    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);


    glutMainLoop();

}




從bin裡面複製freeglut.dll

到week12.04裡面貼上


5.3. 把貼圖弄好

5.4. 把 glm 弄好

要安裝OpenCV

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可

#include <opencv/cv.h>

#include <GL/glut.h>

#include "glm.h"

GLMmodel * pmodel=NULL;

GLuint id1, id2; ///TODO:增加2個 貼圖ID

int myTexture(char * filename)

{

    IplImage * img = cvLoadImage(filename); ///OpenCV讀圖

    cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)

    glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能

    GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID

    glGenTextures(1, &id); /// 產生Generate 貼圖ID

    glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);

    return id;

}

void

drawmodel(void)

{

    if (!pmodel) {

pmodel = glmReadOBJ("Gundam.obj");

if (!pmodel) exit(0);

glmUnitize(pmodel);

glmFacetNormals(pmodel);

glmVertexNormals(pmodel, 90.0);

    }


    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);

}

void display()

{

    glClearColor(1,0,0,1);

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    drawmodel();


    glutSwapBuffers();

}

///下面是從 GLUT專案main.cpp剪貼來的

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };

const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };


const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };

const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };

const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };

const GLfloat high_shininess[] = { 100.0f };


int main( int argc, char** argv )

{

    glutInit( &argc, argv );

    glutInitDisplayMode(GLUT_DOUBLE |GLUT_DEPTH);

    glutCreateWindow("week12 hw4");


    glutDisplayFunc(display);


    ///下面是從 GLUT專案main.cpp剪貼來的

    glEnable(GL_DEPTH_TEST);

    glDepthFunc(GL_LESS);


    glEnable(GL_LIGHT0);

    glEnable(GL_NORMALIZE);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);


    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);

    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);

    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

    glLightfv(GL_LIGHT0, GL_POSITION, light_position);


    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);

    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);

    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);

    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);


    myTexture("Diffuse.jpg");///如果只有1張,就不用記 id 了啦


    glutMainLoop();

}


2021年5月12日 星期三

懶嵐\(。∀ ° )/ Week12

 Part1.

安裝老師給的3D Exploration
匯入Gundam.obj

Part2.

左上角另存,Sample APP要勾起來
開一個OpenGL專案
把gundam.cpp跟gundam.bmp放到專案資料夾
刪掉整個原本的main.c
加入gundam.cpp
前面新增兩個define (不知道第幾千幾萬行的程式碼要用到的,總之要加)

#define GL_BGR_EXT 0x80E0

#define GL_BGRA_EXT 0x80E1

palette的程式碼註解掉

///(LPLOGPALETTE) lpPalette = (LPLOGPALETTE)HeapAlloc (hHeap, 0,

/// sizeof (LOGPALETTE) + (nColors * sizeof (PALETTEENTRY)));

再註解掉

///glRotatef (30.0f, 1.0f, 0.0f, 0.0f);

///glRotatef ((GLfloat) nAngle, 0.0f, 1.0f, 0.0f);

///glRotatef ((GLfloat) nAngle2, 1.0f, 0.0f, 0.0f);

///glScalef (nSize+2.5f,nSize+2.5f,nSize+2.5f);


加上學過的

glRotatef(nAngle,0,1,0);

glScalef(3,3,3);

然後他會轉#

Bonus.

把gundam.obj匯入MAYA裡
可以練習切割你的模型
右邊的Modeling Toolkit選擇Face
把需要的部分圈選起來
接著按下下面的Separate
加上一些Cube
.
.
.
.
.
.
你就可以做一個自己的鋼彈黑暗大法師(?





NEKO's Computer Graphics_week12

 

    


    還是早安


    首先處理上周沒出現的模型(使用 3D Exploration)

    下載軟體後,把模型丟進去長這樣:

    

    然後匯出 .cpp檔(這個有點厲害),等等會用到這個模型的程式:


    

    然後開啟GLUT專案,bin改在同目錄,複製貼上

    定義 #define GL_BGR_EXT 0x80E0    #define GL_BGRA_EXT 0x80E1

    再把 Palette的兩行註解,結果如下:

    

                                                                        模型其實會跳

    

    不想讓模型跳動,所以我們去修改程式碼

    把一堆旋轉刪掉,縮放值固定,只做橫向旋轉:

 



   接著為了旋轉關節,使用3D建模程式(這裡用MAYA)裁切關節:

    



    然後切好之後要匯出obj檔

    因為老師有提供,所以這個先跳過

    再來開新的專案,把打光函數和主程式留下來,還是那個茶壺:

    


    再把上周的glm程式擴充加進來,不過時間不夠,好像又卡在上週那裡了

    下周見

    






小乖的圖學筆記 week12

1.安裝3DEXPLOR181

2.開啟3DEXPLOR181

3.將鋼彈模型匯入

4.將鋼彈模型匯出成cpp檔

5.開啟glut專案

6.把main.cpp改成鋼彈的程式碼並按照下面兩張圖做新增&修改

7.把匯出鋼彈模型的bmp檔放在C:\Users\Administrator\Desktop\freeglut\bin

8.程式運行長這樣(會旋轉跳動)

9.把旋轉和縮放註解掉

10.切割模型的練習

11.把老師給的程式碼貼上去執行就行了

【】week12 3D模型-2【】


安裝3D Exploration,將gundam.obj點開(滑鼠左鍵轉動、中鍵移動、右鍵縮放),輸出cpp檔會生成兩個檔案(bmp、cpp)

開新的OpenGL檔案,把main.c替換成gundam_3Dexp.cpp,最上面加上兩行#define、框框裡註解掉
把原先的刪掉加上自己的旋轉、放大

開maya切Face、將要輸出的部分選起來、Export Selection就可以分開輸出了
開新GLUT專案
更改執行目錄

本人發言不代表本人立場 week12

主題:鋼彈模型

1. 3D Exploration

  • 安裝3D Exploration -> 用它開gundam模型
  • 存成cpp檔 (要選sample APP)


2. 改程式碼

  • 開OpenGL專案
  • remove main.c
  • add gundam_1.cpp (要放同一個目錄)


  • 加上:
#define GL_BGRA_EXT 0x80E1
#define GL_BGR_EXT 0x80E0

  •  註解掉 Pallette 的兩行 -> 執行


  • 註解原本旋轉縮放的程式碼,改成:
glScalef(3,3,3);
glRotatef(nAngle,0,1,0);

執行結果: 


  • 用MAYA匯入模型 -> 選取要的face -> 匯出 Obj 檔

  • 開GLUT -> 貼上程式碼
  • 用notepad++修改工作目錄
  • 把freeglut.dll複製到專案目錄

裝opencv
照前幾個禮拜的教學貼圖跟放glm.cpp

築損 Week12

 第1部份

3D Exploration 安裝

匯入Gundan.obj

Save as成Sample APP

開啟OpenGl專案 把.cpp跟.bmp檔放在專案目錄

remove原本main.c程式

Add file .cpp

增加

#define GL_BGR_EXT 0x80E0

#define GL_BGRA_EXT 0x80E1

註解掉

(LPLOGPALETTE) lpPalette = (LPLOGPALETTE)HeapAlloc (hHeap, 0,

 sizeof (LOGPALETTE) + (nColors * sizeof (PALETTEENTRY)));

註解掉

glRotatef (30.0f, 1.0f, 0.0f, 0.0f);

glRotatef ((GLfloat) nAngle, 0.0f, 1.0f, 0.0f);

glRotatef ((GLfloat) nAngle2, 1.0f, 0.0f, 0.0f);

glScalef (nSize+2.5f,nSize+2.5f,nSize+2.5f);

增加

glRotatef(nAngle,0,1,0);

glScalef(3,3,3);

執行結果










-----------------------------------------------------------------------------------------------------------------------------

第0部份


執行結果


-----------------------------------------------------------------------------------------------------------------------------

第0部份


執行結果


-----------------------------------------------------------------------------------------------------------------------------

距地表面160 Week11

 #include "glm.h" GLMmodel* pmodel = NULL; void drawmodel(void) {     if (!pmodel) { pmodel = glmReadOBJ("data/porsche.obj...