在DX9上为顶点缓冲区创建结构
Create struct for vertex buffer on DX9
我在DirectX项目中遇到了一个巨大的问题。我需要为vertexbuffer制作结构。。
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), },
};
但我该如何在循环中做到这一点?我需要制作巨大的三角形(三维地形)。所以我试过这样的东西:
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
,因此在源代码的顶部确保包含正确的标题:
#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);
因此,您可以将每个值分配给结构的一个成员,而不是像我在第一个示例中那样尝试一次性分配整个结构。
您可以通过设置结构的每个组件来设置结构的值,如下所示。
struct Person
{
int age;
string name;
};
Person person[2];
person[0].age = 20;
person[0].name = "zdd";
person[1].age = 30;
person[1].name = "ddz";
相关文章:
- 在共享缓冲区内存中创建 ::std::string 对象
- openCL-创建子缓冲区返回错误代码13
- 创建一个结构的关联数组,以创建一个缓冲区,供键快速访问
- 创建一个简单的前向迭代器,该迭代器在循环缓冲区的"end"处自动换行
- 使用协议缓冲区创建通用反序列化程序
- 可变长度数组:如何在C++中创建具有可变大小的缓冲区
- 使用(非对象)API 时改变表数组C++而不重新创建整个平面缓冲区
- 如何创建缓冲区并制作Syncronize流
- 从浮点数组创建缓冲区
- 如何使用模板函数从缓冲区(T* 数据数组)创建 cv::Mat
- 如何有效地从标准:d创建D3D缓冲区
- 从gstreamer缓冲区创建输入张量
- 如何从顶点/索引缓冲区创建 CGAL Nef_polyhedron_3
- 从缓冲区创建Qimage,没有深层复制
- 使用C++缓冲区创建PhotoImage:Python 3.3,Python.Boost和Tkinter
- 在DX9上为顶点缓冲区创建结构
- 从内存缓冲区创建fstream对象
- 从帧缓冲区创建的JPEG被旋转180度
- opencv C++从android NV21图像数据缓冲区创建Mat对象
- 如何使用协议缓冲区创建动态消息