gpt4 book ai didi

c++ - 在 DX9 上为顶点缓冲区创建结构

转载 作者:行者123 更新时间:2023-11-30 02:50:34 24 4
gpt4 key购买 nike

我的 DirectX 项目有一个大问题。我需要为顶点缓冲区创建结构..

CUSTOMVERTEX vertices[] =
{
{ 2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ 0.0f, 3.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ -2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(255, 0, 0), },
};

但是我如何在循环中执行此操作?我需要制作巨大的三角形区域(3d 地形)。所以,我试过这样的事情:

void Field_Generation::Field_Generate(int X, int Y, int Z)
{
int zeme[X][Y];
int n=0;

for (int i=0;i < X;i++)
{
for (int j=0;i < Y;j++)
{
zeme[i][j] = rand() % Z;
}
}

for (int i=0;i < X;i++)
{
for (int j=0;i < Y;j++)
{
int color1= rand() % 255;
int color2= rand() % 255;
int color3= rand() % 255;

n++;
CUSTOMVERTEX verticles[n] = {{i,j,zeme[i][j],D3DCOLOR_XRGB(color1,color2,color3),}};


}
}
}

但这对我不起作用。 :( 我不知道该怎么做。请帮忙。谢谢。

最佳答案

您发布的代码有很多问题。

首先,这是行不通的:

int zeme[X][Y];

您不能以这种方式创建动态数组。虽然有多种方法可以做到这一点,但我建议使用 std::vector 因此在源代码的顶部确保包含正确的 header :

#include <vector>
using namespace std;

然后你可以像这样定义你的zeme:

vector<vector<int> > zeme(X, vector<int>(Y, 0));

现在您可以像以前一样使用 zeme[x][y] 访问您的元素。

接下来您需要创建一个数组来保存您的自定义顶点数据,您可以再次使用 std::vector。这应该定义为类成员或全局变量,而不是在函数内部定义。像这样的东西:

std::vector<CUSTOMVERTEX> m_pVertices;

然后,在您的循环中,像这样初始化每个条目:

CUSTOMVERTEX pVertex = {i, j, zeme[i][j], D3DCOLOR_XRGB(color1,color2,color3) };
m_pVertices.push_back(pVertex);

稍后,当您需要将指向顶点数组的指针传递给 DirectX 进行绘图时,请使用此语法获取指向数据开头的指针:

CUSTOMVERTEX *pData = &m_pVertices[0];

(请注意,在 C++11 中,有其他方法可以处理上述所有内容)

如果您已经有一个 CUSTOMVERTEX 数组,另一种选择是初始化循环内的每个组件。因此,假设您的 CUSTOMVERTEX 具有这样的结构(我猜是因为您没有显示它):

struct CUSTOMVERTEX 
{
float x, y, z;
D3DCOLOR nCol;
};

然后,在循环中,您可以像这样初始化每个条目(您需要使用结构中定义的任何名称):

verticles[n].x = i;
verticles[n].y = j;
verticles[n].z = zeme[i][j];
verticles[n].nCol = D3DCOLOR_XRGB(color1,color2,color3);

因此,您将每个值分配给结构的一个成员,而不是像我在第一个示例中那样尝试一次性分配整个结构。

关于c++ - 在 DX9 上为顶点缓冲区创建结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20382670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com