아니요, 실제로 그렇게 할 수있는 방법이 없습니다.
지오메트리 셰이더 호출에는 입력 프리미티브가 필요하며 0 개 이상의 출력 프리미티브를 생성합니다. 입력 프리미티브가 없으면 실제로 형상 셰이더 를 실제로 호출 하는 방법이 없습니다 . 물론 각 입력 프리미티브에 대해 지오메트리 쉐이더의 최대 출력 프리미티브 수의 한계를 늘릴 수 있습니다 (현재 실제 한계를 모릅니다, 아마도 수천 정도 여야합니다). 당신 그래서 아마 각 지점에 대한 1024 개 삼각형을 생성 할 수 있지만, 당신은 항상 있어야 어떤 입력 프리미티브.
당신이 필요하지 않습니다 그러나 것은 기하학의 실제 개념이다. 합리적인 위치에서 3D 포인트를 렌더링 할 필요는 없으며 추상 인덱스 또는 텍스처 좌표 또는 속성과 같은 의미를 가질 수 있으며 의미있는 3D 위치는 아닙니다. 정점에 어떤 속성이 있는지 지정하는 사람은 없습니다. 속성 없이 정점 을 렌더링 할 수도 있습니다 . 그러나 기본 요소에 실제 속성이없는 경우에도 일부 기본 요소 를 렌더링 하여 기하 도형 셰이더를 호출해야합니다.
그러나 실제로 각 그리드 셀에 대한 점을 렌더링하고 해당 셀에 대한 행진 큐브 삼각형을 생성하는 것은 실제로 간단한 접근 방식입니다. 물론이 셀에 포함 된 속성은 사용자에게 달려 있습니다. 3D 위치, 3D 텍스처의 텍 코드 등 무엇이든 렌더링 할 수있는 그리드 셀입니다. 순전히 의미 적으로 말하면, 실제로는 그 점들을 "파기"한 다음 삼각형으로 "대체"하지 않고, 각 점을 삼각형 세트로 "변환"합니다. 이것이 바로 쉐이더 쉐이더의 목적이며 "해킹"또는 "부적절한"것은 없습니다. 아무도 기하학 셰이더가 "적절한"입력과 동일한 출력 기본 유형을 생성해야한다고 말합니다 .
복셀 그리드를 렌더링하는 입력이 거의없는 방법을 달성하기 위해 할 수있는 일은 속성이없는 점을 그리는 것입니다. 즉, 속성 배열이 전혀 필요하지 않으며 모든 속성 배열을 비활성화하고 glDrawArrays
필요한 셀 수로 단순 을 호출하십시오 . 그런 다음 정점 셰이더 또는 지오메트리 셰이더에서 입력 정점 ID (예 : gl_VertexID
유일하게 보유한 정보) 에서 약간의 인덱스 마법으로 필요한 3D 그리드 셀 인덱스를 생성 한 다음 조회에서 마칭 큐브 지오메트리를 계산할 수 있습니다. 3D 볼륨 텍스처 (또는 모든 데이터 구조)
그래서 돌이켜 보면 처음부터 진술을 다시 언급해야 합니다. 입력 프리미티브 없이 프리미티브 를 생성 할 수 없지만 입력 지오메트리 없이 프리미티브 를 생성 할 수 있습니다 .