2020年5月6日 星期三

標題懶得想_week11

引入模型

下載檔案(這次還要下載source的檔案)

開啟圖示相應的OBJ檔
v=頂點 , vn=法向量 , f=小面,mtllib=引用貼圖庫,usemtl=引用貼圖





開始今天的程式(OBJ檔、貼圖座標)


解壓source.zip所需檔案>glm.hglm.c檔放到專案資料夾中>

glm.c為glm.cpp

將glm.cpp add加入專案目錄裡>

將Al.obj(記得mlt是貼圖有些檔案要附上)檔放入freeglut/bin資料夾中


source.zip/transformation.c可以知道glm.h外掛如何使用,如下:
下面是指標下面成是用來指向模型的


寫入程式

#include <GL/glut.h>
#include "glm.h"
GLMmodel * model=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 };///打光

void display(void)

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    if(model==NULL) model = glmReadOBJ("data/Al.obj");///所以要放在bin/data
    glmUnitize(model);///調整為單位大小(-1~1)
    glmFacetNormals(model);///計算facet法向量s
    glmVertexNormals(model,90);///計算vertex法向量s
    glPushMatrix();
    glRotated(180,0,1,0);///模型轉正面
    glmDraw(model,GLM_SMOOTH | GLM_MATERIAL);///畫模型
    glPopMatrix();
    glutSwapBuffers();

}



int main(int argc, char *argv[])

{

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("11");
    glutDisplayFunc(display);

    glEnable(GL_DEPTH_TEST);///3D功能///打光函式
    ///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();



}

結果





沒有留言:

張貼留言