2019年3月31日 星期日

week02

week02

主題 : 點、線、面、顏色


一、使用freeglut簡化程式

(1)到 這裡 將 data、win32、gult32.dll 下載並解壓縮


(2)將 data 裡面的 data 丟進剛剛解壓縮後的windows


(3)並將 glut32.dll 貼到 windows 裡面









(4)點選 Shapes.exe

















二、親手製作第一個程式


>搜尋 freeglut 點進網址並下載解壓縮 (同 week01 第一個GLUT程式)



(2)打開codeblocks>file>project>GLUT project 

(同week01)
















(3)將裡面程式碼全部刪除並打上程式即可跑出一個黑白的茶壺











#include <GL/glut.h>
void display()
{
        glutSolidTeapot(0.3);
        glutSwapBuffers();

}
int main(int argc,char ** argv)
{
    glutInit( &argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("第一個程式");
    glutDisplayFunc(display);
    glutMainLoop();
}





(3)改變茶壺顏色



(首先先打出 glBegin(GL_POLYGON);

結尾打出  glEnd(); )










範例 : 改變為紅色的茶壺 (下方為程式碼)



#include <GL/glut.h>

void display()

{

        glBegin(GL_POLYGON);

            glColor3f(1,0,0);
            glEnd();
        glutSolidTeapot(0.3);
        glutSwapBuffers();



}

int main(int argc,char ** argv)

{

    glutInit( &argc,argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week02 GLUT 哦");
    glutDisplayFunc(display);
    glutMainLoop();
}


2019年3月29日 星期五

賴帥哥的電腦圖學筆記_Week05

Week05
開頭和之前一樣

->先到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/ 下載win32, data, glut32.dll 
->win32, data解壓縮後將所有資料放入windows資料夾
-> 打開Light Material.exe
->這次要調整的數值比較多
其中程式裡字型比較大的9行是我們需要調整的; 而字型比較小的9行則是固定的程式碼



->GLfloat light_pos
->GLfloat light_Ka   ---  a代表Ambient
->GLfloat light_Kd   ---  d代表Diffuse
->GLfloat light_Ks   ---  s代表Specular
環境光Ambient:是由光源發出經環境多次散射而無法確定其入射方向的光,即似乎來自所有方向。其特徵是入射方向和出射方向均為任意方向
漫射光Diffuse:來自特定方向,它垂直於物體時比傾斜時更明亮。一旦它照射到物體上,則在各個方向上均勻地發散出去,效果為無論視點在哪裡它都一樣亮,其特徵是入射方向唯一、出射方向為任意方向
鏡面光Specular:來自特定方向並沿另一方向反射出去,一個平行鐳射束在高質量 的鏡面上產生100%的鏡面反射,其特徵是入射方向和出射方向均唯一                                                                                                                                                                                              而GLfloat material_Ka等等材質數值定義
                                                                                                        了物體對環境光、漫反射光、鏡面光的反
                                                                                                        射(吸收)能力
                                                                                                        其中比較不一樣的GLfloat material_Ke
                                                                                                        表的是自體發光

我九歲_Week06

2019/3/8 week6

今天內容: 打光、3D模型OBJ、GLM讀入OBJ

/1/ 先下載解壓縮[data][win32] glut32.dll  source
在桌面創一個windows的資料夾,把解壓縮後的data、win32、glut32.dill 、source放進去


/2/到 https://www.transmissionzero.co.uk/software/freeglut-devel/
下載 Download freeglut 3.0.0 for MinGW 並解壓縮



/3/將freeglut資料夾的libfreeglut複製貼上 並改名為 libglut32.a


/4/在codeblocks開啟一個project
並將source裡的glm.c glm.h貼到codeblocks的資料夾內(glm.c改成glm.cpp)


/5/在codeblocks內的專案按右鍵選擇 Add files 選擇glm.cpp
會加入一個程式碼


/6/將data資料夾放進freeglut裡的bin資料夾即可



/7/執行程式碼


**程式碼**

#include <GL/glut.h> #include "glm.h" GLMmodel* pmodel = NULL; 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 }; float angle=0;///+++ void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (!pmodel) { pmodel = glmReadOBJ("data/soccerball.obj"); if (!pmodel) exit(0); glmUnitize(pmodel); glmFacetNormals(pmodel); glmVertexNormals(pmodel, 90.0); } glmDraw(pmodel, GLM_SMOOTH); glutSwapBuffers(); } int main(int argc,char ** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("Week06"); glutDisplayFunc(display); glutIdleFunc(display);///+++ glClearColor(1,1,1,1); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); 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(); }