OpenGL ES 2.0ポイントスプライトサイズ


15

OpenGL ES 2.0でポイントスプライトを描画しようとしていますが、頂点シェーダーでgl_PointSizeを高い値に設定しても、すべてのポイントは1ピクセルのサイズになります。

ポイントスプライトを大きくするにはどうすればよいですか?

回答:


24

OpenGL ES 2.0はポイントスプライトをサポートしています。パーティクルに使用します。で使用glDrawElementsGL_POINTSます。

頂点シェーダーで、サイズを設定し、フラグメントシェーダーでテクスチャマッピングにgl_PointSize使用gl_PointCoordします。

私の頂点シェーダー:

uniform mat4 uMvp;
uniform float uThickness;

attribute vec3 aPosition;
attribute vec2 aTexCoord; 
attribute vec4 aColor;

varying vec4 vColor;

void main() {
    vec4 position = uMvp * vec4(aPosition.xyz, 1.);
    vColor = aColor;
    gl_PointSize = uThickness;
    gl_Position =  position;  
}

私のフラグメントシェーダー:

uniform sampler2D tex0;
varying vec4 vColor;

void main() 
{
   gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}

Androidを使用している場合は、私のフランス語のチュートリアルをご覧ください。ポイントスプライトを含む完全なプロジェクトがあります。


floatフラグメントシェーダーで精度を明示的に指定することを忘れないでください-デフォルトのfloat精度がなく、一部のドライバーではそのようなシェーダーがコンパイルに失敗する可能性があります。
keaukraine

1

驚いたことに、glLineWidth()はポイントも大きくします。

    GLES20.glLineWidth(8); // Make the edges (and points!) thicker
    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes

あなたはヒーローです。ボブの祝福。
netpoetica

0

OpenGLES 2.0は、ポイントスプライトを直接サポートしていません。あなたは、どちらかのことができ、あなたのglPointsをテクスチャまたは手動でポイントを中心にカメラ向きとカメラ揃えクワッドを作成します。


5
偽。頂点シェーダーでGL_POINTSとgl_PointSizeを使用する
エリス

@エリスまあ彼はそう言った。投稿されたリンクを見ると、廃止されたGL ES 1の部分と、「glPointsをテクスチャリングする」方法について説明しています-bobobobo
1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.