현재 Frank D. Luna의 DirectX 10 책을 팔로우하고 있습니다. 나는 산을 그리는 데 사용하는 방법을 발견했으며, 왜 그가 그것을 사용하는지 이해하지 못한다. 정점 버퍼 그가 사용 (n 및 m 행 및 열은 다음과 DX가 1.0F 인) 자신이 사용하는 색인 버퍼이어서산 만들기
float dx = 1.0f;
float halfWidth = (n - 1)*dx*0.5f;
float halfDepth = (m - 1)*dx*0.5f;
for (DWORD i = 0; i < m; ++i)
{
float z = halfDepth - i*dx;
for (DWORD j = 0; j < n; ++j)
{
float x = -halfWidth + j*dx;
// Graph of this function looks like a mountain range.
float y = getHeight(x, z);
vertices[i*n + j].pos = D3DXVECTOR3(x, y, z);
// Color the vertex based on its height.
if (y < -10.0f)
vertices[i*n + j].color = BEACH_SAND;
else if (y < 5.0f)
vertices[i*n + j].color = LIGHT_YELLOW_GREEN;
else if (y < 12.0f)
vertices[i*n + j].color = DARK_YELLOW_GREEN;
else if (y < 20.0f)
vertices[i*n + j].color = DARKBROWN;
else
vertices[i*n + j].color = WHITE;
}
}
(getHeight 산악 닮은 기능에 X 및 Z두고)
int k = 0;
for (DWORD i = 0; i < m - 1; ++i)
{
for (DWORD j = 0; j < n - 1; ++j)
{
indexlist[k] = i*n + j;
indexlist[k + 1] = i*n + j + 1;
indexlist[k + 2] = (i + 1)*n + j;
indexlist[k + 3] = (i + 1)*n + j;
indexlist[k + 4] = i*n + j + 1;
indexlist[k + 5] = (i + 1)*n + j + 1;
k += 6; // next quad
}
}
누군가이 두 가지 버퍼 사용 방법을 설명하면 좋을 것입니다. 나는 왜 그가이 방정식을 사용하는지, 그리고이 방정식이 무엇을하는지 확실히 모르겠습니다.
이 간단한 규칙적인 격자입니다. 인덱스 버퍼의 계산은 버퍼 내의 삼각형의 정점의 3 개의 인덱스를 계산합니다. 정확히 당신이 이해하지 못하는 것은 무엇입니까? 모든 세부 사항을 설명하는 것은 너무 많은 것입니다. 인덱스 버퍼가 일반적으로 어떻게 작동하는지 알고 있습니까? –
그가 꼭지점 버퍼에서 원하는 꼭지점을 선택할 때 i * n + j를 사용하는 이유를 이해하지 못합니다. 나는 VB 나 IB에 대한 설명이 필요 없지만 그가 내부에서 사용하는 숫자를 말합니다. – user2226786