タグ

ブックマーク / www.komoto.org (5)

  • OpenGL - Sample01

    ここでは、OpenGLの基礎知識、二次元図形の描き方、glutを使ったウインドウの作り方を解説します。 配布物 sample01.c OpenGLの基礎 OpenGLの大きな特色として、"State Machine"であることがあげられます。どういうことかと言うと、OpenGLは与えられた状態を覚えていて、コマンドが発行されると、覚えている状態をつかって実行します。例えば、色を一度指定すると、もう一度指定しなおすまでずっと同じ色で描画を行います。 毎回いろいろ指定しなくてよいので楽だしオーバーヘッドも少ないのですが、状態を意識していないと痛い目にあったりします。 OpenGL関連ライブラリの構成 How to buildでも触れたように、このページで扱うサンプルプログラムは3つのライブラリを使います。 OpenGLライブラリ(libGL.so / opengl32.dll) OpenGLの

    akio0911
    akio0911 2009/07/25
  • OpenGL - Sample10

    ポリゴンの表裏 ポリゴンには、表面と裏面というものがあります。標準では、頂点が反時計回りに見えるのが表で、時計回りに見えるのが裏になります。ちなみに、glFrontFace()を使うと、表裏を逆にすることもできます。 使用法 ポリゴンの表裏は、処理軽くするために使われます。つまり、ポリゴンのおもて面のみを描き、裏を描かないようにすることで、描くポリゴンを減らし、処理を軽くします。使う関数は、次の2つです。 glEnable(GL_CULL_FACE) 片面表示を有効にします。 void glCullFace(GLenum mode) どの面を描画しないようにするかを指定します。modeには、GL_FRONT、GL_BACK、GL_FRONT_AND_BACKのいずれかです。GL_FRONTを指定すると、表面を描画しない、つまり、裏面のみを描画します。GL_BACKなら、表面のみが描かれ、G

    akio0911
    akio0911 2009/05/10
  • OpenGL - Sample3

    サンプルプログラム 早速ですが、サンプルプログラムを見てください。今回の目玉は、以下の関数です。 void glTranslatef(GLfloat x, GLfloat y, GLfloat z) 平行移動します。 void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) その場での回転。(x,y,z)というベクトルを軸にして、角度angle度だけ回転します。回転の方向は、右ネジの方向です。 今回は使っていませんが、似たような使い方をする関数として、次のような関数があります。 void glScalef(GLfloat x, GLfloat y, GLfloat z) 拡大・縮小をします。 それから、座標変換用の行列を操作する関数として、次の2つを使っています。 void glPushMatrix(void) void

    akio0911
    akio0911 2008/12/07
  • OpenGL - Sample13

    どうやって透明を表現するか 透明なポリゴンを表現する一番簡単な方法は、後ろが透けて見えるようにすることです。もちろん、光の屈折なども考慮すればリアルな透明ポリゴンを描けますが、そんなことをしていたら到底リアルタイム表示などできません。(少くとも現在は) というわけで、透明=後ろが透けて見える、ということのみに話を絞ります。今度は、後ろが透けて見えるようにするには、どうするかということになります。これは簡単で、描くポリゴンの色と、背景の色を合成してやれば背景が透けて見えます。 Alpha値 上のような処理をするときに、Alpha値というものがでてきます。これは、色の合成をするときに、どのくらいの割合で色を混ぜ合わせるかという値です。上の話を逆にたどれば、透明度と考えてもいいでしょう。 ちなみに、OpenGLの仕様を見ていると、RGBA形式で指定などとありますが、色のRGBA形式というのは、赤

    akio0911
    akio0911 2008/12/07
  • OpenGL - Sample8

    今回は、いよいよテクスチャマップをしてみます。sample08.cだけでなく、ppmread.c、ppmread.h、texture1.ppmもいっしょにダウンロードしてください。 テクスチャの読み込み サンプルプログラムを見てみます。まず、最初にppmread.cの方です。OpenGLのテクスチャに直接関係のあるのは、ReadPPMTexture()の中の、glGenTextures()、glBindTexture()、glTexImage2D()の3つの関数です。 (注)今回は、ReadPPMMipmap()は使いません。ミップマップは次回、解説します。 void glGenTextures(GLsizei n, GLuint *textures) OpenGLでは、テクスチャにそれぞれ番号をつけて、テクスチャを管理します。glGenTextures()は、その番号を取得する関数です。

    akio0911
    akio0911 2008/12/07
  • 1