回答:
OpenGL ES 2.0はポイントスプライトをサポートしています。パーティクルに使用します。で使用glDrawElements
しGL_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を使用している場合は、私のフランス語のチュートリアルをご覧ください。ポイントスプライトを含む完全なプロジェクトがあります。
驚いたことに、glLineWidth()はポイントも大きくします。
GLES20.glLineWidth(8); // Make the edges (and points!) thicker
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes
OpenGLES 2.0は、ポイントスプライトを直接サポートしていません。あなたは、どちらかのことができ、あなたのglPointsをテクスチャまたは手動でポイントを中心にカメラ向きとカメラ揃えクワッドを作成します。
float
フラグメントシェーダーで精度を明示的に指定することを忘れないでください-デフォルトのfloat
精度がなく、一部のドライバーではそのようなシェーダーがコンパイルに失敗する可能性があります。