DirectX - 使用顶点数组作为参数创建缓冲区
DirectX - Creating buffer with vertices array as argument
今天我开始使用DirectX(D3D9),一切都很顺利,直到我创建了一个静态网格类。此类包含用于生成缓冲区、绘制和释放缓冲区的方法。
问题出在缓冲区生成功能上。如果我想将顶点数组作为参数传递给函数,则在绘制时不会绘制三角形(使用三角形进行测试),但是,如果在函数中声明顶点(与作为参数传递时的方式相同),则不会绘制三角形。
顶点类:
#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
class CUSTOMVERTEX
{
public:
float X, Y, Z, RHW;
DWORD Color;
};
顶点缓冲区生成函数(不起作用):
void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev)
{
// USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);
VOID* p;
Buffer->Lock(0, 0, (void**)&p, 0);
memcpy(p, Vertices, sizeof(Vertices));
Buffer->Unlock();
}
顶点缓冲区生成函数(确实有效):
void StaticMesh::CreateBuffer(LPDIRECT3DDEVICE9 d3ddev)
{
CUSTOMVERTEX vertices[3] =
{
{ 400.0f, 62.5f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255), },
{ 650.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0), },
{ 150.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0), },
};
// USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);
VOID* p;
Buffer->Lock(0, 0, (void**)&p, 0);
memcpy(p, Vertices, sizeof(Vertices));
Buffer->Unlock();
}
我不明白问题可能是什么。感谢您的任何帮助,如果需要更多信息,请告诉我。
函数
的参数顶点
void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev)
是一个类型指针。因此,函数内部的 sizeof(顶点)只返回指针的大小,而不是您期望的整个数组的大小。
请将顶点数作为另一个参数传递给函数,并像这样修改函数。
void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], int aNumVertices, LPDIRECT3DDEVICE9 d3ddev)
{
// USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
d3ddev->CreateVertexBuffer(aNumVertices*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);
VOID* p;
Buffer->Lock(0, 0, (void**)&p, 0);
memcpy(p, Vertices, aNumVertices * sizeof(CUSTOMVERTEX));
Buffer->Unlock();
}
相关文章:
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 基于参数创建数组
- 从可变参数创建枚举?
- 如何从可变参数模板参数创建 std::tuple<>?
- 在 C++ 中按参数创建不同类型的对象?
- 根据参数创建派生类的新实例
- 基于模板参数创建多个类实现
- C++ 从模板参数创建元组向量
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 在构造函数中使用参数创建一个类数组
- 是否可以使用C 函数中的const int参数创建数组
- 如何使用不同对象的模板容器作为参数创建模板类
- C++:基于积分模板参数创建可变长度元组
- 使用按插入方式排序的参数创建哈希映射
- 避免为非默认参数创建临时变量?
- 是否可以根据参数创建返回对旧项目的引用的构造函数
- 使用整数模板参数创建编译时双精度
- C++ 使用数组作为参数创建泛型函数
- 基于参数创建基类中的派生类