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.