정점 (또는 기하) 셰이더에서 내 정점 중 일부를 계산하려고합니다. 마침내 정점을 그릴 때 정점 배열 객체에 부여한 순서를 잃어 버렸습니다 (GL_ELEMENT_ARRAY_BUFFER 사용). glDrawElements 함수는이 상황에서 작동하지 않고 대신 glDrawArrays를 사용해야합니다. 내가 잘못?변형 피드백 삼각형 메쉬의 잃어버린 순서
변환 피드백에 대한 삼각형 인덱스의 순서를 저장하려면 어떻게해야합니까?
정점 (또는 기하) 셰이더에서 내 정점 중 일부를 계산하려고합니다. 마침내 정점을 그릴 때 정점 배열 객체에 부여한 순서를 잃어 버렸습니다 (GL_ELEMENT_ARRAY_BUFFER 사용). glDrawElements 함수는이 상황에서 작동하지 않고 대신 glDrawArrays를 사용해야합니다. 내가 잘못?변형 피드백 삼각형 메쉬의 잃어버린 순서
변환 피드백에 대한 삼각형 인덱스의 순서를 저장하려면 어떻게해야합니까?
틀린 것은 아닙니다. 정점은 정점 (또는 기하학) 셰이더에 의해 처리되는 순서로 변환 피드백 버퍼에 기록됩니다. 나는 그 주위에 쉬운 길을 보지 못했다.
즉, 캡처 한 버퍼에 정점을 그리려면 glDrawArrays()
을 사용합니다. 또는 GL 4.0 이상에서는 glDrawTransformFeedback()
을 사용할 수도 있습니다.
색인을 생성하고 정점을 원래 순서대로 되돌리려면 다시 조각해야합니다. 색인 버퍼 배열 idxA
에서 n
지표로 채워진 경우, 상기 캡쳐 버퍼 배열 inVertexA
의 정점과 정점하여 입력 버퍼는이 어레이 capturedVertexA
에서, 원래의 순서로 변화 정점으로 outVertexA
에 기록 될 수있다 :
for (int k = 0; k < n; ++k) {
outVertexA[idxA[k]] = capturedVertexA[k];
}
도면이 프리미티브 유형 GL_TRIANGLES
인 경우 작동합니다. GL_TRIANGLE_STRIP
과 같은 그림으로 그리는 경우 변환 피드백이 별도의 삼각형을 생성하기 때문에 색인 논리가 약간 더 복잡해집니다.
변환 피드백을 통해 출력을 다시 실행하고 원래 인덱스 배열의 역 매핑 인 인덱스 배열을 사용하여 GPU가 꼭지점을 다시 셔플하게 할 수 있다고 생각합니다.
어떤 경우에도 어색해 보입니다. 사용 사례를 다시 생각해보고 이 원래 순서대로 정점을 다시 필요로하는지 확인하십시오.
면책 조항 : 나는 결코 피드백 변환을 사용하지 않았으며 드라이버에서 구현/수정 작업을 거의 수행하지 않았습니다. 위의 모든 내용은 사양을 읽는 것으로부터의 나의 이해입니다.
응답 해 주셔서 감사합니다. Finnaly 나는 렌더링 패스에 glDrawElements를 사용했고 VBO에서 핑퐁 효과를 얻기 위해 TF와 동일한 VAO를 서로 교환하는 두 개의 다른 VBO를 바인딩했습니다. 메쉬의 버텍스를 변경하고 싶지는 않습니다. 모든 삼각형에 대해서만 GPGPU 연산을 수행하고 싶습니다. – alexGrac