OpenGL

OpenGLでOBJファイルを読み込む

・今回はglm.hとglm.cをつかって読み込んでみる

2つのファイルはhttp://www.opengl.org/resources/libraries/glut/からDLしてくる

(3.7 Source Code Download for Win32というファイル、なお3.7の部分はバージョン名なので最新のものをDLしてくるといい)

・解凍して、progs->demos->smoothにglm.hとglm.cファイルがあるのでコピーしてプロジェクトに持ってくる

OBJファイルも用意してプロジェクトにおいておく

・プログラムの本体を書く

main.cpp

#include <stdio.h>

#include "glm.h"

// 変数宣言

GLMmodel *Model;

char *FileName="test.obj"; // 自分で用意したobjファイルを読み込む

// プロトタイプ宣言

void display();

void reshape(int w, int h);

// モデルのロード

void ModelLoad()

{

// モデルの読み込み

Model = glmReadOBJ(FileName);

// 法泉データの計算

glmFacetNormals(Model);

// 頂点の法線を計算、スムージング角は90度

glmVertexNormals(Model,90);

// 単位化

glmUnitize(Model);

}

// OpenGLのFuncの初期化

void GLUT_CALL_FUNC()

{

glutDisplayFunc(display);

glutReshapeFunc(reshape);

}

// その他の設定

void OTHER_INIT()

{

glClearColor(0.0, 0.0, 1.0, 1.0);

glEnable(GL_DEPTH_TEST);

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);

glEnable(GL_COLOR_MATERIAL);

glEnable(GL_NORMALIZE);

ModelLoad();

}

// 初期化

void GLUT_INIT(int *argcp, char **argv)

{

glutInit(argcp, argv);

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);

glutInitWindowSize(600,400);

glutCreateWindow("Model Loader");

GLUT_CALL_FUNC();

OTHER_INIT();

}

int main(int argc, char **argv)

{

GLUT_INIT(&argc, argv);

glutMainLoop();

return 0;

}

//-------------------コールバック------------------------//

void display()

{

//光源の位置

static float Light0Pos[]={-10.0, 10.0, 10.0,0};


glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glLoadIdentity();


gluLookAt(3.0, 4.0, 5.0, 0,0,0, 0.0, 1.0, 0.0);


//位置だけ設定(あとはデフォルト)

glLightfv(GL_LIGHT0, GL_POSITION, Light0Pos);


glmDraw(Model,GLM_SMOOTH);


glutSwapBuffers();

}

void reshape(int w, int h)

{

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(30.0, (double)w / (double)h, 0.1, 1000.0);

glMatrixMode(GL_MODELVIEW);

}

参考サイト(参考日:2011/03/3)

http://wiki.livedoor.jp/mikk_ni3_92/d/%bc%c2%c1%a9%ca%d410%3a%3aobj%a5%d5%a5%a1%a5%a4%a5%eb%a5%ed%a1%bc%a5%c0

http://d.hatena.ne.jp/gomi-box/20080519/1211159996