답변:
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;
}
당신이 안드로이드에 있다면, 내 프랑스어 자습서를 볼 수 있습니다 . 포인트 스프라이트가 포함 된 전체 프로젝트가 있습니다.
놀랍게도 glLineWidth ()는 포인트를 더 크게 만듭니다.
GLES20.glLineWidth(8); // Make the edges (and points!) thicker
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes
float
프래그먼트 셰이더에서 정밀도 를 명시 적으로 지정하는 것을 잊지 마십시오. 기본float
정밀도 가 없으며 일부 드라이버에서 이러한 셰이더가 컴파일되지 않을 수 있습니다.