«第1回 レンダリングパイプライン 最新 第3回 シェーダプログラム»

床井研究室

※このブログは遅くとも 2027 年 3 月に管理者の定年退職により閉鎖します (移転先は管理者本人共々模索中)

■ 2009年08月26日 [OpenGL][GLSL][ゼミ] 第2回 準備

2010年01月08日 19:07更新

昼食

私が学生の時, ボスはほぼ毎日研究室のメンバーと昼食を食べに行っていました (昼になると「メシ行こかぁ〜」と声をかけてきた). でも, 私自身はそういうことを全然していません. 弁当を持参していることもありますが, 学生さんが怖いというか, 声をかけづらいということもあります. 学生さんに命令形でお願いすることも苦手です. 指導力がなくて申し訳ありません. でも, このままでは大事なことも伝わりませんね. それでも学生さんはマイペースながらそれなりにやってくれているようで, ありがたいことです.

OpenGL

このゼミは OpenGL の使い方について勉強することが目的なので, OpenGL が使える環境を用意しないといけません. 研究室のマシンは, ドライバを入れ替えれば OpenGL 3.0 以降を使えるものもありますが, 現状では多くのマシンが OpenGL 2.1 までの機能しか使えないと思います. 私のマシンのビデオカードも RADEON 9800 という古いものなので, OpenGL 2.1 までしか対応できません. そこで, このゼミでは OpenGL 2.1 を使いつつ, できるだけ固定機能ハードウェアを使わない, というやり方で進めたいと思います. 出張やめたら PC 買い換える資金が捻出できるんだけどな.

GLUT

また, このゼミでも例によって GLUT を使うことにします. オリジナルの GLUT はもう長いことメンテナンスされていないので, 代わりに freeglutOpenGLUT を使ったほうがいいかもしれません. 実際, 最近の Linux のディストリビューションの多くは freeglut を採用しているようです. Mac OS X の GLUT は, Apple 自前の実装です. なお GLUT では, 古い OpenGL の機能を削り落とした forward compatible あるいは core profile のレンダリングコンテキストを作成することができません (多分…実はよく知らんのだな).

Windows で GLUT を使うには, GLUT の Windows 用のバイナリファイルに含まれる glut32.lib と glut32.dll, および glut.h をソースプログラムと同じフォルダに入れておいてください.

GLEW

グラフィックスハードウェアが対応しており, ドライバが最新であれば, OpenGL の最新の機能を使用することができます. しかし, 最新の機能を呼び出す API が, 必ずしも開発環境 (Visual Studio など) から使用できるようになっているとは限りません. 不足している API を整備するには, GLEWGLee を導入します. なお, Linux において X Window System に NVIDIA のプロプライエタリドライバを組み込んでいる場合や, Mac OS X では, これらを使用する必要はありません. AMD (ATI) の場合は GLEW を組み込む必要があると思いますが, 実機がないので割愛させてください.

Windows で GLEW を使用するには, GLEW の Windows 用バイナリファイルに含まれる glew32.lib と glew32.dll, および glew.h と wglew.h (これは多分使わないと思う) をソースプログラムと同じフォルダに入れておいてください.

glext.h

あと, glext.h も最新のものを入手しておいてください. Windows の場合は, これもソースプログラムと同じフォルダに入れておいてください.

雛形のソースプログラム

と言うわけで, このゼミで作成するプログラムの最初の雛形は, 以下ののようになります. GLEW に関係する部分を太字にしてあります.

#include <stdio.h>
#include <stdlib.h>
#if defined(WIN32)
//#  pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#  pragma comment(lib, "glew32.lib")
#  include "glew.h"
#  include "glut.h"
#  include "glext.h"
#elif defined(__APPLE__) || defined(MACOSX)
#  include <GLUT/glut.h>
#else
#  define GL_GLEXT_PROTOTYPES
#  include <GL/glut.h>
#endif
 
/*
** 画面表示
*/
static void display(void)
{
  /* 画面クリア */
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
}
 
/*
** 初期化
*/
static void init(void)
{
#if defined(WIN32)
  /* GLEW の初期化 */
  GLenum err = glewInit();
  if (err != GLEW_OK) {
    fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
    exit(1);
  }
#endif
  
  /* 背景色 */
  glClearColor(1.0, 1.0, 1.0, 1.0);
}
 
/*
** メインプログラム
*/
int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(display);
  init();
  glutMainLoop();
  
  return 0;
}

ノートパソコン

今使っているノートパソコンは7年目なので, いい加減買い換えたいと思ってます. 2回ほど宙を舞ってるし. 今度は OpenGL を使ったデモが動かせるように, それなりの GPU が載ったものが欲しいんですが, そうすると軽いものがありません. VAIO Z はちと高いし. なんだかんだで微妙に研究費が足りない. 巨額の研究費はいらんのだけどなぁ.


編集 «第1回 レンダリングパイプライン 最新 第3回 シェーダプログラム»