OpenGL ES 2.0 포인트 스프라이트 크기


15

OpenGL ES 2.0에서 포인트 스프라이트를 그리려고하지만 모든 점은 버텍스 쉐이더에서 gl_PointSize를 높은 값으로 설정하더라도 1 픽셀 크기로 끝납니다.

포인트 스프라이트를 더 크게 만들려면 어떻게해야합니까?

답변:


24

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;
}

당신이 안드로이드에 있다면, 내 프랑스어 자습서를 볼 수 있습니다 . 포인트 스프라이트가 포함 된 전체 프로젝트가 있습니다.


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은 포인트 스프라이트를 직접 지원하지 않습니다. glPoint텍스처 처리 하거나 점을 중심으로 카메라를 향한 카메라 정렬 쿼드를 수동으로 생성 할 수 있습니다 .


5
그릇된. 버텍스 쉐이더에서 GL_POINTS와 gl_PointSize를 사용하십시오
Ellis

@Ellis 글쎄 그는 말했다. 이 링크를 보면이 "당신의 glPoints 질감 '에 GL ES (1) 사용되지 않습니다 부분, 방법에 대해 이야기 게시
bobobobo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.