2020年5月5日 星期二

week11

<1>
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();
}


沒有留言:

張貼留言