どうやらWindowにOpenGLの命令が反映されていないようで、glClearColorの関数で色を変更しても
反映されません。どうすればいいのでしょうか?
プログラムは下記の通りです。下記のサイトを参考にGLFWを使用しました。
http://marina.sys.wakayama-u.ac.jp/~tokoi/GLFW.pdf
http://nn-hokuson.hatenablog.com/entry/ ... /19/145029
よろしくお願いします。
#include <cstdlib>
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
void render()
{
// 点
static const GLfloat vtx1[] = { 90.0f, 250.0f };
glVertexPointer(2, GL_FLOAT, 0, vtx1);
glPointSize(4.0f);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_POINTS, 0, 1);
glDisableClientState(GL_VERTEX_ARRAY);
// 線
static const GLfloat vtx2[] = {
180.0f, 200.0f,
180.0f, 300.0f,
};
glVertexPointer(2, GL_FLOAT, 0, vtx2);
glLineWidth(4.0f);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_LINES, 0, 2);
glDisableClientState(GL_VERTEX_ARRAY);
// 三角
static const GLfloat vtx3[] = {
320.0f, 300.0f,
260.0f, 200.0f,
390.0f, 200.0f,
};
glVertexPointer(2, GL_FLOAT, 0, vtx3);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
// 四角形
static const GLfloat vtx4[] = {
450.0f, 300.0f,
450.0f, 200.0f,
550.0f, 200.0f,
550.0f, 300.0f,
};
glVertexPointer(2, GL_FLOAT, 0, vtx4);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_QUADS, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
}
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, 1.0f, 0.0f, 0.5f);
// モニタとの同期
glfwSwapInterval(1);
// 描画範囲の指定
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, 640, 0.0f, 480, -1.0f, 1.0f);
//ウィンドウが開いている間繰り返す
while (glfwWindowShouldClose(window) == GL_FALSE)
{
glClear(GL_COLOR_BUFFER_BIT);
//glClearColor(0.2f, 0.2f, 0.2f, 0.0f);
//
//ここで描画処理を行う
//
render();
//イベントを取り出す
glfwWaitEvents();
}
glfwTerminate();
return 0;
}