DynamicVertexBuffer에 대해 읽었으며 자주 변경되는 데이터에 대해 더 나은 방법을 제시했습니다. 나는 큐브에 의해 구축 된 세계를 가지고 있으며 큐브의 꼭지점을이 버퍼에 저장하여 화면에 그려야합니다.XNA 4.0의 DynamicVertexBuffer 사용
그러나 모든 큐브에 정점이있는 것은 아닙니다 (일부는 공기이며 투명합니다). 그리고 큐브의 모든면이 서로 마주보아야하는 것은 아닙니다 (서로 마주 보게됩니다). 그래서 정점이 무엇인지 어디 버퍼에 저장? 또한 특정면을 마지막으로 그려야합니다. 예를 들어 유리나 잎처럼 투명도가있는면이 있어야하며이 면도 알파 블렌딩을 엉망으로 만들지 않기 위해 뒤에서 앞으로 보이는 순서로 그려야합니다.
이러한 모든 정점이이 버퍼에 임의로 저장되는 경우, 정점이 어디에 있는지 어떻게 알 수 있습니까?
또한 vertex 수는 바뀔 수 있지만 DynamicVertexBuffer는 크기를 전혀 변경할 수 없기 때문에 나에게는 매우 동적 인 것처럼 보이지 않습니다. 얼굴을 추가하거나 제거해야 할 때마다 버퍼를 다시 만들어야합니까?
"모든면을 -ve x 방향으로 무시하십시오"라고 생각합니다. 어쨌든,이 정보를 주셔서 감사합니다. 텍스처는 모두 같은 텍스처 맵에서 가져온 것이므로 문제가되지 않습니다. 그러나 내가 세상에 큐브를 추가한다고 말하면,이 큐브는 렌더링이 필요한 곳에 배치됩니다. 정점을 추가하려면? 다른 모든 정점이 저장된 장소의 크기를 수정하지 않고 GPU에이 새 큐브에 대해 어떻게 알릴 수 있습니까? 나는 옥트리 렌더링을 찾을 것이며, 언급 된 quadtrees와 octree를 보았다. – Bevin
큐브가 얼굴보다 높은 수준의 데이터 구조라고 가정 할 때 -ve x 방향의 모든 큐브를 무시한다는 의미였습니다. 큐브를 무시할 수 있으면 6 개의 얼굴을 모두 자동으로 무시할 수 있습니다. 따라서 큐브를 먼저 놓는 것이 더 빠르며 잠재적으로 보이는 큐브를 설정하면 얼굴을 삭제하려고 시도합니다. –
당신은 여전히 버텍스 버퍼를 여러 프레임에 걸쳐 영속적 인 것으로 생각하고 있습니다. 대부분의 엔진에서는 그렇지 않습니다. 매 프레임마다 처음부터 정점 버퍼를 채 웁니다. 물론 공간을 할당 할 수는 있지만 데이터를 다시 작성해야합니다. 잠재적으로 눈에 보이는 얼굴 집합이 모든 프레임마다 바뀝니다. 생각해 보면 수백만 개의 큐브가있는 세계를 가질 수 있지만 가능한 한 적은 수의 얼굴로 렌더링하려는 각 프레임 - 아마도 수백 개 -이 트릭은 가능한 한 작은 크기의 버텍스 버퍼를 얻는 것입니다. 틀. –