c++ - 使用 C++ 和 directx 创建地形

标签 c++ directx

<分区>

http://www.riemers.net/eng/Tutorials/DirectX/C++/Series1/tut10.php

在链接中给出的地形创建教程中,我无法理解代码,基本上这段代码中发生了什么

short s_Indices[(WIDTH-1)*(HEIGHT-1)*3];


for (int x=0;x< WIDTH-1;x++){
    for (int y=0; y< HEIGHT-1;y++)    {
        s_Indices[(x+y*(WIDTH-1))*3+2] = x+y*WIDTH;
        s_Indices[(x+y*(WIDTH-1))*3+1] = (x+1)+y*WIDTH;
        s_Indices[(x+y*(WIDTH-1))*3] = (x+1)+(y+1)*WIDTH;
    }
}

short s_Indices[(WIDTH-1)*(HEIGHT-1)*6];


for (int x=0;x< WIDTH-1;x++){
    for (int y=0; y< HEIGHT-1;y++)    {
        s_Indices[(x+y*(WIDTH-1))*6+2] = x+y*WIDTH;
        s_Indices[(x+y*(WIDTH-1))*6+1] = (x+1)+y*WIDTH;
        s_Indices[(x+y*(WIDTH-1))*6] = (x+1)+(y+1)*WIDTH;

        s_Indices[(x+y*(WIDTH-1))*6+3] = (x+1)+(y+1)*WIDTH;
        s_Indices[(x+y*(WIDTH-1))*6+4] = x+y*WIDTH;
        s_Indices[(x+y*(WIDTH-1))*6+5] = x+(y+1)*WIDTH;
    }
}

什么是 (x+y(WIDTH-1))*3+2] 以及为什么它等于 x+y*WIDTH; 这是创建 4*3 地形的代码,其中 z 为 0*

任何人都可以向我简要解释这段代码,在此先感谢..

最佳答案

它正在设置一个索引数组,用于枚举用于绘制几何图形的顶点。每组 3 个索引代表一个三角形(正如您在链接到的页面上看到的那样,有一个带有一组三角形的图形说明了这一点)。

比如

s_Indices[(x+y*(WIDTH-1))*3+2] = x+y*WIDTH;

是这样一个三角形的左下角。

s_Indices[(x+y*(WIDTH-1))*3] = (x+1)+(y+1)*WIDTH;

是右上角。

            x+1,y+1
          /|
         / |
    x,y /__| x+1,y

关于c++ - 使用 C++ 和 directx 创建地形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15459089/

相关文章:

c++ - 应该使用全局函数吗?

C++ Directx 11 多显卡

c++ - 采样 D3D11 深度缓冲区时出现问题

c++ - 网格表示 - 一个顶点(空间位置)= 一个位置,tex 坐标,法线?

c++ - sockaddr、sockaddr_in 和 sockaddr_in6 有什么区别?

c++ - 我的缓冲区包含元素,但未被打印

c++ - 将 char 数组复制到字节数组中,而不仅仅是传递指针

c# - 优化一个非常大的两级深度迭代

c++ - Direct3D 11 CreatePixelShader (E_INVLIDARGS)

c++ - DirectX 11 帧缓冲区捕获(C++,无 Win32 或 D3DX)