2011-09-08 3 views
0

예를 들어, 나는 10x10 "cloth"mesh를 가지고 있다고 가정하고, 각 사각형은 두 개의 삼각형입니다. 이제 애니메이션을 만들고 싶다면 CPU에서 스프링 계산을 할 수 있습니다. 각 버텍스는 고유 한 "스프링"데이터를 가지며, 바라는 바에 따라 "천"의 유형과 같이 바운스됩니다.처리 후 어떻게 정보를 그래픽 카드에서 읽을 수 있습니까?

그러나 최소 380 개가 필요합니까? 프레임 당 스프링 계산. 다행스럽게도, 버텍스 당 계산은 "난처하게 병렬"입니다. - 버텍스 당 하나의 CPU가 있다면 각 버텍스는 단일 CPU에서 실행될 수 있습니다. 따라서 GPU는 이러한 계산을 실행하는 데 이론적으로 탁월한 선택입니다. 그래, 난이 방법을 알고 (

1) 그래픽 카드에 모든 정점 데이터 전송 : -

제외

(이것은 다이렉트/SlimDX을 사용하고) 나는 아무 생각/내가 /해야 얼마나 확실하지 않다 없었다 물건을 렌더링하고 나만의 픽셀 별 및 질감 혼합 전역 조명 효과 파일을 작성하기도했지만 각 꼭지점이 적어도 세 개의 다른 꼭지점의 위치 데이터에 액세스 할 수 있어야합니다. 나는 관련 버텍스 위치와 버텍스 위치의 수를 TextureCoords에 고정시킬 수 있다고 생각하지만, 다른 표준 솔루션이있을 수 있습니다.

2) 나중에 메모리에있는 메쉬를 업데이트 할 수 있도록 모든 정점 데이터를 읽으십시오. 그렇지 않으면 2 + 3 = 5, 2 + 3 = 5, 2 + 3 = 5를 2 + 3 = 5 - 2 = 3으로 추가 할 때와 같은 정확한 결과와 똑같은 데이터에 대해 각 업데이트가 작동합니다 + 1.5 = 4.5이다.

그리고 내가 잘못된 방향으로보고있을 수 있습니다.

감사합니다.

답변

1

데이터 접근법을 사용하여 데이터를 텍스처로 패키징하고 특수한 HLSL 셰이더를 작성하여 스프링 힘을 계산 한 다음 정점 위치를 업데이트 할 수 있습니다. 이 접근법은 완전히 유효하지만, 텍스처 픽셀을 틀에 박힌 방식으로 사용하고 있기 때문에 문제를 디버깅하려고 할 때 문제가 될 수 있습니다 (텍스처를 그리고 주어진 픽셀의 값을 볼 수있는 코드를 작성할 수 있습니다). 장기적으로 CUDA, DirectCompute 또는 OpenCL과 같은 것을 사용하는 것이 더 쉽습니다. CUDA를 사용하면 CUDA에서 DirectX 버텍스 버퍼에 액세스 할 수 있도록 "바인딩"할 수 있습니다. 그런 다음 CUDA 커널에서 위치를 사용하여 힘을 계산 한 다음 업데이트 된 위치를 렌더링하기 전에 새로운 위치를 정점 버퍼에 (GPU에서 병렬로) 쓸 수 있습니다. DirectX 10/11 DirectX SDK에서 DirectCompute를 사용하는 천 데모가 있습니다.

관련 문제