忍者ブログ
ADMIN / ENTRY
カレンダー
02 2024/03 04
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
31
新刊カレンダー
ブログ内検索
プロフィール
HN:
Nina.A
性別:
男性
趣味:
麻雀、ラノベ、漫画
自己紹介:
MJ4や天鳳等でよく麻雀やってます。もし会ったらよろしくです。
ブログは単なるメモ帳となる予定。
C/C++勉強中の大学生雑記
<<  2024/03  >>
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
2024/03/19  12:55:33
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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();
}
【実行例】
OpenGL実行結果

■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線分(v0v1v2v3…)
GL_LINE_STRIP連続の線分(v0v1v1v2…)
GL_LINE_LOOPループ
GL_TRIANGLES三角形(△v0v1v2、△v3v4v5…)
GL_TRIANGLE_STRIP連続の三角形(△v0v1v2、△v2v1v3…)
GL_TRIANGLE_FANv0を1つの頂点とする連続の三角形(△v0v1v2、△v0v2v3…)
GL_QUADS四角形
GL_QUAD_STRIP連続の四角形
GL_POLYGONv0…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関数内の他のコマンドについてはまた後で

Powerd by NINJAブログ / Designed by SUSH
Copyright © メモ帳ブログ All Rights Reserved.
忍者ブログ [PR]