顯示具有 08160280_蔡承泰 標籤的文章。 顯示所有文章
顯示具有 08160280_蔡承泰 標籤的文章。 顯示所有文章

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
.
.
.
.
.
.
你就可以做一個自己的鋼彈黑暗大法師(?





2021年5月5日 星期三

懶嵐\(。∀ ° )/ Week11

 Part1.

到Moodle的上課用軟體下載
windows.zip , source.zip , data.zip
然後解壓縮
source資料夾裡的glm.c , glm.h , transformation.c
複製到glut專案資料夾
glm.c直接改成glm.cpp
transformation.cnotepad++打開
複製貼到專案的main.cpp
glm.cpp加進專案
data.zip資料夾裡的檔案放進freeglut資料夾bin
就可以解決閃退的問題了

Part2.

程式碼全部刪掉
換成
#include "glm.h"
GLMmodel* pmodel = NULL;
void
drawmodel(void)
{
    if (!pmodel) {
    pmodel = glmReadOBJ("data/porsche.obj");
    if (!pmodel) exit(0);
    glmUnitize(pmodel);
    glmFacetNormals(pmodel);
    glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空
    drawmodel();///glutSolidTeapot(0.3)
    glutSwapBuffers();
}
int main(int argc, char *argv[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("Week11 3D模型");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutMainLoop();///(5)主要程式
}
得到一個白色的東東

Part3.

加上前幾個禮拜教的打光

#include "glm.h"
GLMmodel* pmodel = NULL;
void
drawmodel(void)
{
    if (!pmodel) {
    pmodel = glmReadOBJ("data/porsche.obj");
    if (!pmodel) exit(0);
    glmUnitize(pmodel);
    glmFacetNormals(pmodel);
    glmVertexNormals(pmodel, 90.0);
    }

    glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空
    glPushMatrix();
        glRotatef(180,0,1,0);
        drawmodel();
    glPopMatrix();
    glutSwapBuffers();
}
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[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("Week11 3D模型");///(3)建立GLUT視窗

    glEnable(GL_DEPTH_TEST);///深度偵測
    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);

    glutDisplayFunc(display);///(4)準備display()函式
    glutMainLoop();///(5)主要程式
}

88








2021年4月28日 星期三

懶嵐\(。∀ ° )/ Week10

前情提要

這禮拜上內容的都跟聲音有關

以下截圖請自行想像他有聲音

拜託啦 

Part1.

這禮拜玩聲音
音檔須為wav檔
並且放在freeglut的bin資料夾裡

輸入數字撥放音檔

Part2.


把茶壺加進來
把上一part的輸入數字改成按下數字鍵
上程式碼
#include <windows.h>
#include <GL/glut.h>///使用GLUT外掛
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("ahoy.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("mdfk.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("faq.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("shut.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("wry.wav",NULL,SND_ASYNC);

}
int main(int argc, char *argv[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備display()函式
    glutKeyboardFunc(keyboard);
    glutMainLoop();///(5)主要程式
}

#再次麻煩觀看者想像一下他有聲音

Part3.

外掛CMP3_MCI就可以撥放mp3檔

#include <windows.h>
#include <GL/glut.h>///使用GLUT外掛
#include "CMP3_MCI.h"///檔案放在week10_sound
CMP3_MCI mp3;///宣告變數
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("ahoy.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("mdfk.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("faq.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("shut.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("wry.wav",NULL,SND_ASYNC);

}
int main(int argc, char *argv[])///main()函式
{
   mp3.Load("ahoy.mp3");///檔案放執行目錄freeglut/bin
   mp3.Play();///播放
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備display()函式
    glutKeyboardFunc(keyboard);
    glutMainLoop();///(5)主要程式
}


Part4.

除了按數字鍵播音樂
加上滑鼠左鍵中鍵右鍵也可以
上程式碼

#include <windows.h>
#include <GL/glut.h>///使用GLUT外掛
#include "CMP3_MCI.h"///檔案放在week10_sound
CMP3_MCI mp3;///宣告變數
CMP3_MCI ahoy,shut,faq;
static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清背景
    glutSolidTeapot(0.3);
    glutSwapBuffers();///更新畫面
}
void keyboard(unsigned char key,int x,int y)
{
    if(key=='1')PlaySound("ahoy.wav",NULL,SND_ASYNC);
    if(key=='2')PlaySound("mdfk.wav",NULL,SND_ASYNC);
    if(key=='3')PlaySound("faq.wav",NULL,SND_ASYNC);
    if(key=='4')PlaySound("shut.wav",NULL,SND_ASYNC);
    if(key=='5')PlaySound("wry.wav",NULL,SND_ASYNC);
}
void mouse(int button, int state, int x, int y)
{
    if(state==GLUT_DOWN&&button==GLUT_LEFT_BUTTON) ahoy.Play();
    if(state==GLUT_DOWN&&button==GLUT_MIDDLE_BUTTON) shut.Play();
    if(state==GLUT_DOWN&&button==GLUT_RIGHT_BUTTON) faq.Play();
}
int main(int argc, char *argv[])///main()函式
{
    ahoy.Load("ahoy.mp3");///檔案放執行目錄freeglut/bin
    shut.Load("shut.mp3");
    faq.Load("faq.mp3");
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);
    glutMainLoop();///(5)主要程式
}

#有啦有聲音啦不只有聲音你亂按時他還超嗨的





2021年4月14日 星期三

懶嵐\(。∀ ° )/ Week08

Part1.

複習

Part2.

加背
上程式碼
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
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 display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空
    glBindTexture(GL_TEXTURE_2D,id1);
    glutSolidTeapot(0.3);
    glBindTexture(GL_TEXTURE_2D,id2);
    glBegin(GL_POLYGON);
        glTexCoord2f(0,1);glVertex2f(-1,-1);
        glTexCoord2f(1,1);glVertex2f(1,-1);
        glTexCoord2f(1,0);glVertex2f(1,1);
        glTexCoord2f(0,0);glVertex2f(-1,1);
    glEnd();
    glutSwapBuffers();
}
int main(int argc, char *argv[ ])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備display()函式
    id1=myTexture("ame.jpg");
    id2=myTexture("ame2.jpg");
    glEnable(GL_DEPTH_TEST);

    glutMainLoop();///(5)主要程式
}

Part3.

今天新教的如何打光
上程式碼
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
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 display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空

    glBindTexture(GL_TEXTURE_2D,id1);
    glutSolidTeapot(0.3);

    glBindTexture(GL_TEXTURE_2D,id2);
    glBegin(GL_POLYGON);
        glTexCoord2f(0,1);glVertex2f(-1,-1);
        glTexCoord2f(1,1);glVertex2f(1,-1);
        glTexCoord2f(1,0);glVertex2f(1,1);
        glTexCoord2f(0,0);glVertex2f(-1,1);
    glEnd();

    glutSwapBuffers();
}

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[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗
    glutDisplayFunc(display);///(4)準備display()函式

    id1=myTexture("ame.jpg");
    id2=myTexture("ame2.jpg");
    glEnable(GL_DEPTH_TEST);

    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();///(5)主要程式
}













2021年4月7日 星期三

懶嵐\(。∀ ° )/ Week07

I.

玩老師的程式

II.

Step1.

安裝openCV
設定CodeBlocks -> Settings -> Compiler
等等圖檔放在freeglut資料夾的bin裡面

Step2.

上程式碼
#include <opencv/highgui.h>
int main(int argc, char** argv)
{
    IplImage*img=cvLoadImage("ame.jpg");
    cvShowImage("ame",img);
    cvWaitKey(0);
}

Step3.

把圖貼到茶壺上
#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("ame.jpg"); ///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);
}   ///最後一行最難/最重要, 所貼圖影像的資料都設定好
void display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char *argv[ ])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutIdleFunc(display);///TODO 重看畫面
    init();

    glutMainLoop();///(5)主要程式
}

Step4.

加上原本的圖當背景

#include <opencv/highgui.h> ///使用 OpenCV 2.1 比較簡單, 只要用 High GUI 即可
#include <opencv/cv.h>
#include <GL/glut.h>
void init()
{
    IplImage * img = cvLoadImage("ame.jpg"); ///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);
 ///最後一行最難/最重要, 所貼圖影像的資料都設定好
void display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空
    glBegin(GL_POLYGON);
        glTexCoord2f(0,1);glVertex2f(-1,-1);
        glTexCoord2f(1,1);glVertex2f(1,-1);
        glTexCoord2f(1,0);glVertex2f(1,1);
        glTexCoord2f(0,0);glVertex2f(-1,1);
    glEnd();
    glutSolidTeapot(0.3);

    glutSwapBuffers();
}
int main(int argc, char *argv[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutIdleFunc(display);///TODO 重看畫面
    init();

    glutMainLoop();///(5)主要程式
}







2021年3月31日 星期三

懶嵐\(。∀ ° )/ Week06

I.

玩老師寫的萬花筒程式碼


II.

修改上禮拜的程式碼
#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);///旋轉
         glutSolidCube(1);///畫個方塊
    glPopMatrix();///還原矩陣
    glutSwapBuffers();
    angle++;
}
int main(int argc, char *argv[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutIdleFunc(display);///TODO 重看畫面

    glutMainLoop();///(5)主要程式
}
雖然這個正方形現在看起來不會轉
可是其實實際上是會轉的
只是你們現在看不出來#

III.

做一個轉動的小長方形
然後移動到正方形的右上角

#include <GL/glut.h>///使用GLUT外掛
float angle=0;
void hand()
{
    glPushMatrix();///備份矩陣
        glScalef(0.5,0.1,0.1);///長條
        glColor3f(0,0,1);///blue
        glutSolidCube(1);///方塊
    glPopMatrix();///還原矩陣
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空
    glColor3f(1,1,1);
  glutSolidCube(1);///body
    glPushMatrix();///備份矩陣
        glTranslatef(0.5,0.5,0);///整個移到右上角
        glRotatef(angle,0,0,1);///對中心旋轉
        glTranslatef(0.25,0,0);///把關節移到中心
        hand();
    glPopMatrix();///還原矩陣
    glutSwapBuffers();
    angle++;
}
int main(int argc, char *argv[])///main()函式
{
    glutInit(&argc, argv);///(1)Init初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能
    glutCreateWindow("08160280 蔡承泰");///(3)建立GLUT視窗

    glutDisplayFunc(display);///(4)準備display()函式
    glutIdleFunc(display);///TODO 重看畫面

    glutMainLoop();///(5)主要程式
}
沒有錯右上角那條藍色的東東他會轉
真的啦相信我

IIII.

進階版
來讓右上角藍色的東東變成兩條
然後連左邊一起加上去

#include <GL/glut.h>
float angle=0;
void hand()
{
    glPushMatrix();
        glScalef(0.5,0.1,0.1);
        glColor3f(0,0,1);
        glutSolidCube(1);
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);
    glutSolidCube(0.5); //Body
    glPushMatrix(); //Right side
        glTranslatef(0.25,0.25,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.25,0,0);
        hand();
        glPushMatrix();
            glTranslatef(0.25,0,0);
            glRotatef(angle,0,0,1);
            glTranslatef(0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();

    glPushMatrix(); //Left side
        glTranslatef(-0.25,0.25,0);
        glRotatef(-angle,0,0,1);
        glTranslatef(-0.25,0,0);
        hand();
        glPushMatrix();
            glTranslatef(-0.25,0,0);
            glRotatef(-angle,0,0,1);
            glTranslatef(-0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();
    angle++;
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("08160280蔡承泰");

    glutDisplayFunc(display);
    glutIdleFunc(display);

    glutMainLoop();
}
尼看他長手手了\(。∀ ° )/





2021年3月24日 星期三

懶嵐\(。∀ ° )/ Week05

I.

使用小葉老師寫的transform.exe
觀察
glTranslatef(x,y,z)移動
glRotatef(x,y,z)旋轉
glScalef(x,y,z)改變大小

II.

Step1.

打開上禮拜滑鼠畫圖的程式碼
#include <GL/glut.h>///使用GLUT外掛 #include <math.h>///使用數學外掛 #include <stdio.h>///因為要printf int N=0,vx[3000],vy[3000]; float angle=0;///角度 void display(void) { glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);///清空 glPushMatrix();///備份矩陣 glRotatef(angle,0,0,1);///旋轉對z軸旋轉 glBegin(GL_LINE_LOOP); for(int i=0;i<N;i++){ glVertex2f((vx[i]-150)/150.0,-(vy[i]-150)/150.0); } ///減一半 除一半 glEnd(); glPopMatrix();///還原矩陣 glutSwapBuffers(); } void keyboard(unsigned char key, int x,int y) { angle++;///TODO display(); } void motion(int x,int y) { ///左,中,右,上,下,x座標,y座標 vx[N]=x; vy[N]=y; N++; display(); } int main(int argc, char *argv[ ])///main()函式 { glutInit(&argc, argv);///(1)Init初始化GLUT glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);///(2)Init初始化 Display 的功能 glutCreateWindow("08160280蔡承泰");///(3)建立GLUT視窗 glutDisplayFunc(display);///(4)準備display()函式 glutKeyboardFunc(keyboard);///按按鍵才會動 glutMotionFunc(motion);///註冊motion函式 glutMainLoop();///(5)主要程式 }


距地表面160 Week11

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