カレンダー
| 10 | 2025/11 | 12 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
最新記事
(01/30)
(01/18)
(12/16)
(12/12)
(11/25)
(11/25)
(11/24)
(11/24)
(11/22)
(11/17)
最新コメント
[12/25 日没]
[11/15 無色大師]
[11/12 無色大師]
[11/11 無色大師]
[11/08 無色大師]
リンク
新刊カレンダー
ブログ内検索
プロフィール
HN:
Nina.A
性別:
男性
趣味:
麻雀、ラノベ、漫画
自己紹介:
MJ4や天鳳等でよく麻雀やってます。もし会ったらよろしくです。
ブログは単なるメモ帳となる予定。
ブログは単なるメモ帳となる予定。
カウンタ
C/C++勉強中の大学生雑記
2025/11/14
02:53:20
2008/11/17
12:30:33
void display(void){
// 全ピクセルクリア
glClear(GL_COLOR_BUFFER_BIT);
// 白色、幅0.8の方形
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POINTS);
glVertex2f(0.1, 0.1);
glVertex2f(0.9, 0.9);
glEnd();
glPointSize(3.0);
glBegin(GL_POINTS);
glVertex2f(0.9, 0.1);
glVertex2f(0.1, 0.9);
glEnd();
glPointSize(1.0);
// 赤色、幅0.6の方形
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINE_STRIP);
glVertex3f(0.2, 0.2, 0.0);
glVertex3f(0.8, 0.2, 0.0);
glVertex3f(0.8, 0.8, 0.0);
glEnd();
glLineWidth(3.0);
glBegin(GL_LINE_STRIP);
glVertex3f(0.8, 0.8, 0.0);
glVertex3f(0.2, 0.8, 0.0);
glVertex3f(0.2, 0.2, 0.0);
glEnd();
glLineWidth(1.0);
// 緑色、幅0.4の方形
glColor3f(0.0, 1.0, 0.0);
glLineStipple(1, 0xAAAA);
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINE_STRIP);
glVertex3f(0.3, 0.3, 0.0);
glVertex3f(0.7, 0.3, 0.0);
glVertex3f(0.7, 0.7, 0.0);
glEnd();
glLineStipple(2, 0xAAAA);
glBegin(GL_LINE_STRIP);
glVertex3f(0.7, 0.7, 0.0);
glVertex3f(0.3, 0.7, 0.0);
glVertex3f(0.3, 0.3, 0.0);
glEnd();
// 青色、幅0.2の方形
glColor3f(0.0, 0.0, 1.0);
glLineStipple(2, 0xA448);
glEnable(GL_LINE_STIPPLE);
glBegin(GL_LINE_STRIP);
glVertex3f(0.4, 0.4, 0.0);
glVertex3f(0.6, 0.4, 0.0);
glVertex3f(0.6, 0.6, 0.0);
glEnd();
glLineWidth(3.0);
glLineStipple(3, 0xAAAA);
glBegin(GL_LINE_STRIP);
glVertex3f(0.6, 0.6, 0.0);
glVertex3f(0.4, 0.6, 0.0);
glVertex3f(0.4, 0.4, 0.0);
glEnd();
glDisable(GL_LINE_STIPPLE);
glLineWidth(1.0);
glFlush();
}
【実行例】
- ■void glPointSize(GLfloat size);
- 点のサイズを変更する。
- ■void giLineWidth(GLfloat width);
- 線の幅を変更する。
- ■void glLineStipple(GLint factor, GLushort pattern);
-
点線のパターンを指定する。
factorはpatternの長さを拡大する。例えばpatternが010101でfactorが2であれば、これはpatternが001100110011であることと同値である。 - ■void glEnable(GLenum cap);
- 機能を有効にする。
- ■void glDisable(GLenum cap);
- 機能を無効にする。
- ■GLboolean glIsEnabled(GLenum cap);
- 機能が有効であるか問い合わせる。
PR
2008/11/16
16:59:11
#include <GL/glut.h>
void display(void){
// 全ピクセルクリア
glClear(GL_COLOR_BUFFER_BIT);
// 白色、幅0.8の方形
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex2f(0.1, 0.1);
glVertex2f(0.9, 0.1);
glVertex2f(0.9, 0.9);
glVertex2f(0.1, 0.9);
glEnd();
// 赤色、幅0.6の方形
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_POLYGON);
glVertex3f(0.2, 0.2, 0.0);
glVertex3f(0.8, 0.2, 0.0);
glVertex3f(0.8, 0.8, 0.0);
glVertex3f(0.2, 0.8, 0.0);
glEnd();
// 緑色、幅0.4の方形
glColor3f(0.0, 1.0, 0.0);
glRectf(0.3, 0.3, 0.7, 0.7);
// 青色、幅0.2の方形
glColor3f(0.0, 0.0, 1.0);
GLdouble start[2] = {0.4, 0.4};
GLdouble end[2] = {0.6, 0.6};
glRectdv(start, end);
glFlush();
}
// 初期化する関数
void init(void){
// 背景色
glClearColor(0,0,0,0);
// 視野に関する値を初期化
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
int _tmain(int argc, char* argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(100, 100);
glutInitWindowPosition(100, 100);
glutCreateWindow("hello");
init();
glutDisplayFunc(&display);
glutMainLoop();
return 0;
}
【実行結果】最近OpenCVばかりやってますが、OpenGLも勉強中です。
初期化関係の関数。
- ■void glutInit(int *argcp, char **argv);
- コマンドラインの引数を処理する。他のGLUTルーチンより最初に実行する必要有り。
- ■void glutInitDisplayMode(unsigned int mode);
- ウィンドウのモードを指定する。
- ■void glutInitWindowSize(int width, int height);
- ウィンドウのサイズを指定する。
- ■void glutInitWindowPosition(int x, int y);
- ウィンドウの位置を指定する。
- ■int glutCreateWindow(const char *title);
- ウィンドウを作成する。返却値はウィンドウの一意な識別子。
- ■void glutDisplayFunc(void (*func)(void));
- ウィンドウを描画する関数を指定する。
- ■void glutMainLoop()
- 作成された全てのウィンドウを表示し、イベント処理を開始し、ディスプレイコールバックを起動する。
そのほかの関数
- ■void glClear(GLbitfield mask);
-
指定したバッファをクリアカラーでクリアする。
バッファ 名前 カラーバッファ GL_COLOR_BUFFER_BIT デプスバッファ GL_DEPTH_BUFFER_BIT アキュムレーションバッファ GL_ACCUM_BUFFER_BIT ステンシルバッファ GL_STENCIL_BUFFER_BIT - ■void glClearColor(GLclampf red, GLClampf green, GLclampd blue, GLclampf alpha);
- カラーバッファのクリアに使用するクリアカラーをRGBAで設定する。
- ■void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
- 描画するオブジェクトの色を指定する。
- ■void glBegin(GLenum mode); …ポリゴンの頂点群… glEnd();
-
頂点群を与えて、ポリゴンや点を描画する。modeのとりうる値は以下のとおり。
値 描画のされ方 GL_POINTS 点 GL_LINES 線分(v0v1、v2v3…) GL_LINE_STRIP 連続の線分(v0v1、v1v2…) GL_LINE_LOOP ループ GL_TRIANGLES 三角形(△v0v1v2、△v3v4v5…) GL_TRIANGLE_STRIP 連続の三角形(△v0v1v2、△v2v1v3…) GL_TRIANGLE_FAN v0を1つの頂点とする連続の三角形(△v0v1v2、△v0v2v3…) GL_QUADS 四角形 GL_QUAD_STRIP 連続の四角形 GL_POLYGON v0…vn-1を頂点とするポリゴン - ■void glVertex3f(GLfloat x, GLfloat y, GLfloat z);
- glBegin()~glEnd()内で頂点を指定する。引数により様々な関数が用意されている(下を参照)。
- ■void glVertex{234}{sifd}[v](TYPE coords);
-
上の一般形。
{234}で引数の数を指定する。2は2次元平面状の点(z=0)、3は3次元空間上の点、4は3次元空間上の点を斉次座標でそれぞれ指定する。
{sifd}で引数の型を指定。
[v]がついている場合は引数がベクトル形であることを示す。 - ■void glRect{sifd}[v](TYPE coords);
- 方形を描画する。
- ■void glFlush(void);
- OpenGLコマンドを実行する。これで不十分な場合はglFinish()関数を利用する。
今回のプログラムでは使わなかったがイベントを処理する関数を設定する関数には以下の物がある。
- ■void glutReshapeFunc(void (*func)(int width, int height));
- ウィンドウのサイズが変わったときに呼び出される関数を指定する。
- ■void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
- キーボードからの入力があったときに呼び出される関数を指定する。
- ■void glutMouseFunc(void (*func)(int button, int state, int x, int y));
- マウスからの入力があったときに呼び出される関数を指定する。
- ■void glutMotionFunc(void (*func)(int x, int y));
- マウスボタンが押された状態で移動したとき(?)に呼び出される関数を指定する。
- ■void glutIdleFunc(void (*func)(void));
- アイドル時に呼び出される関数を指定する。
init関数内の他のコマンドについてはまた後で
