OpenGL ポイントスプライトの使い方ープログラムソースコードー
OpenGLでは、点に対してテクスチャをレンダリングさせる方法として、「ポイントスプライト」がある。
そのポイントスプライトの使い方を説明していく。(四角形に対してテクスチャを貼ることができることを前提として説明します。)
まず、バーテックスシェーダーのプログラムはこうなります。
#version 120
attribute vec3 position;
attribute vec2 vertexUV;
varying vec2 UV;
uniform mat4 mvp;
void main(){
gl_Position = mvp * vec4(position,1);
UV = vertexUV;
}
フラグメントシェーダーのプログラムです。
#version 120
varying vec2 UV;
uniform sampler2D texture;
void main(){
gl_FragColor = texture2D( texture, UV );
}
ポイントスプライトの場合は、四角形にテクスチャを貼るときに必要なUV座標の指定はいりません。
ただし、上記のように、バーテックス・フラグメントシェーダー内に書いておく必要はあります。
点を描画する前に指定するプログラム
//点に対してテクスチャ座標を生成するようにする
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
/* テクスチャマッピング開始 */
glEnable(GL_TEXTURE_2D);
/* Point Sprite を有効にする */
glEnable(GL_POINT_SPRITE);
他、通常のポイントを描画するプログラム以外に必要なプログラム
glActiveTexture(GL_TEXTURE0);
glUniform1i(mTextureLocation, 0);
glEnableVertexAttribArray(mVertexUVLocation);
glVertexAttribPointer(mVertexUVLocation, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glBindTexture(GL_TEXTURE_2D, mNormalMario);
glUniformMatrix4fv(mMvpLocation, 1, GL_FALSE, &mPlayerMVP[0][0]);
glDrawArrays(GL_POINTS, position, 1);
mTextureLocationは、フラグメントシェーダープログラムのuniform sampler2Dのtextureのことです。
mVertexUVLocationは、シェーダプログラムのUVのことです。
mNormalMarioは、読み込んだテクスチャです。
mMvpLocationは、シェーダプログラムのmvp。
mPlayerMVPは、main内で計算したMVP。
positionは、シェーダプログラムのpositionのことです。