1.
http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/載<data>、<source>、<windows>、<glut32.dll>
2.
將<data>、<glut32.dll>放進解壓縮後的<windows>
3.
下載freeglut,做該做的,開啟codeblocks新專案
4.
解壓縮<source>將<glm.c>、<glm.h>、<transform.c>和剛剛的<data>放進codeblock的資料夾內
**<glm.c>必須改名成<glm.,cpp>
5.對著codebocks裡的week11右鍵,並add files加入<glm.cpp>,<main.cpp>裡的程式碼改成<transform.c>的程式碼,再執行即可。
<2>叫出<data/Al.obj>模型
#include <GL/glut.h>
#include "glm.h"
GLMmodel*model=NULL;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(model==NULL){
model=glmReadOBJ("data/Al.obj");
glmUnitize(model);
glmFacetNormals(model);
glmVertexNormals(model,90);
}
glmDraw(model,GLM_SMOOTH|GLM_MATERIAL);
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week11");
glutDisplayFunc(display);
glutMainLoop();
}
<3>替模型打光,並且翻面
加入1. 光線位置擔當
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,3.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};
加入2. 物件翻面擔當
glPushMatrix();
glRotatef(180,0,1,0);
glPopMatrix();
加入3. 設定光線、物件材質擔當
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);
<4> 加入貼圖
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(model==NULL){
model=glmReadOBJ("data/soccerball.obj");///todo
glmUnitize(model);
glmFacetNormals(model);
glmVertexNormals(model,90);
}
glPushMatrix();
glRotatef(180,0,1,0);
glmDraw(model,GLM_SMOOTH|GLM_MATERIAL);///todo
glPopMatrix();
glutSwapBuffers();
}
加入1. 光線位置擔當
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,3.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};
加入2. 物件翻面擔當
glPushMatrix();
glRotatef(180,0,1,0);
glPopMatrix();
加入3. 設定光線、物件材質擔當
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);
<4> 加入貼圖
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(model==NULL){
model=glmReadOBJ("data/soccerball.obj");///todo
glmUnitize(model);
glmFacetNormals(model);
glmVertexNormals(model,90);
}
glPushMatrix();
glRotatef(180,0,1,0);
glmDraw(model,GLM_SMOOTH|GLM_MATERIAL);///todo
glPopMatrix();
glutSwapBuffers();
}




沒有留言:
張貼留言