2013-09-28 2 views
0

OpenGL + GLSL 셰이더로 텍스처에 렌더링하려고합니다. 시작을 위해 흰색으로 30x30 텍스처의 모든 픽셀을 채우려고합니다. 텍스처의 각 픽셀을 나타내는 0에서 899까지의 버텍스 쉐이더 인덱스로 전달합니다. 이 올바른지? 버텍스 쉐이더 :OpenGL GLSL이 텍스처로 렌더링됩니다.

flat in int index; 

void main(void) { 
gl_Position = vec4((index % 30)/15 - 1, floor(index/30)/15 - 1, 0, 1); 
} 

조각 쉐이더 :

out vec4 color; 


void main(void) { 
color = vec4(1, 1, 1, 1); 
} 

답변

1

당신은 픽셀 당 하나 개의 정점으로, 900 개 정점을 렌더링하기 위해 노력하고있다? 왜 그것을하고 있습니까? 어떤 기본 유형을 사용하고 있습니까? 포인트를 사용하는 경우에만 의미가 있지만, 실제로 조각 센터를 맞추려면 출력 좌표를 약간 수정해야합니다.

일반적인 방법은 전체 프레임 버퍼를 채우는 쿼드 (4 개의 꼭지점이있는 트라이앵글 스트립으로 쉽게 나타남)를 렌더링하는 것입니다. 이를 달성하기 위해서는 뷰포트를 전체 frambeuffer로 설정하고 렌더링을 (-1, -1)에서 (1,1)까지 쿼드해야합니다.

두 가지 방법 모두에서 꼭지점 속성이 필요하지 않습니다. 단지 gl_VertexID을 사용할 수 있습니다 (접근 방식에서는 index으로 직접 교체하거나 쿼드에 대한 4 개의 정점 코드의 const 배열에 대한 인덱스로 사용).

+0

텍스처의 모든 단일 픽셀의 색상을 변경할 수 있고 GL_POINTS를 사용하고 있기 때문에 900 개의 꼭지점을 렌더링하려고합니다. – user1760770

+0

@ user1760770 : 음, 그 쿼드 앱솔루트를 사용하여 모든 단일 포인트의 색상을 변경할 수도 있습니다. 조각 쉐이더는 모든 단일 조각에 대해 호출됩니다. 프래그먼트 쉐이더로 데이터를 가져 오는 방법에 대해 걱정하는 경우 : 텍스처가 스탠드 래드 응답입니다. TBO를 사용하여 FS의 일부 버퍼 객체에 직접 액세스 할 수도 있습니다. – derhass

+0

조각 쉐이더에서 조각의 위치를 ​​얻는 방법을 잘 모르겠습니다. – user1760770

관련 문제