OpenGLでポリゴンが表示されない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
akindo
記事: 14
登録日時: 9年前

OpenGLでポリゴンが表示されない

#1

投稿記事 by akindo » 8年前

OpenGLのプログラムを書いているのですが、何故か表示されるはずのポリゴンが表示されません。
どうやら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;
}

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: OpenGLでポリゴンが表示されない

#2

投稿記事 by ISLe » 8年前

裏画面に描いた内容を表画面に転送(あるいは入れ替える)glfwSwapBuffers関数を呼び出さないと表示されないと思います。
#リンク先には両方とも書いてあります。

あと、提示された内容だと、背景色と点以外の描画色が同じなので、正しく動いても見えないです。

akindo
記事: 14
登録日時: 9年前

Re: OpenGLでポリゴンが表示されない

#3

投稿記事 by akindo » 8年前

指摘された箇所を直したら出来ました。有難うございました。

閉鎖

“C言語何でも質問掲示板” へ戻る