ソースコードは下記のとおりです。下のリンク先を参考にしました。
"xfile.h"は下のリンク先のソースを一切改変せずに使用しました。
http://marina.sys.wakayama-u.ac.jp/~tokoi/GLFW.pdf
http://nn-hokuson.hatenablog.com/entry/ ... /19/145029
http://www21.atwiki.jp/opengl/pages/91.html
表示する3DモデルはSwordBoutのプレイヤーの3Dをmv1からxに変換して
使用しています。
http://dxlib.o.oo7.jp/SwordBout/
#define GLFW_INCLUDE_GLU
#include <cstdlib>
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "xfile.h"
#pragma comment(lib, "glu32.lib")
float angle = 0.5f;
MODEL* model;
#define WIDTH 640
#define HEIGHT 480
int main(void)
{
// GLFWを初期化する
if (glfwInit() == GL_FALSE)
{
// 初期化に失敗した
std::cerr << "Can't initialize GLFW" << std::endl;
return 1;
}
//プログラム終了時の処理を登録する
atexit(glfwTerminate);
// ウィンドウを作成する
GLFWwindow *const window(glfwCreateWindow(640, 480, "Hello!", NULL, NULL));
if (window == NULL)
{
//ウィンドウが作成できなかった
std::cerr << "Can't create GLFW window." << std::endl;
glfwTerminate();
return 1;
}
//作成したウィンドウをOpenGLの処理対象にする
glfwMakeContextCurrent(window);
// GLEWを初期化する
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
// GLEWの初期化に失敗した
std::cerr << "Can't initialize GLEW" << std::endl;
return 1;
}
//背景色を指定する
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
// モニタとの同期
glfwSwapInterval(1);
// 描画範囲の指定
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
model = new MODEL("pc.x", 100);
//ウィンドウが開いている間繰り返す
while (glfwWindowShouldClose(window) == GL_FALSE)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glClearColor(0.2f, 0.2f, 0.2f, 0.0f);
//
//ここで描画処理を行う
//
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, WIDTH, HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, WIDTH / HEIGHT, 0.1, 2000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 500.0, 500.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glRotatef(angle, 1.0f, 0.0f, 0.0f);//回転
glRotatef(angle, 0.0f, 1.0f, 0.0f);//回転
model->Draw();
//イベントを取り出す
glfwWaitEvents();
glfwSwapBuffers(window);
}
glfwTerminate();
return 0;
}