我正在开发一个简单的程序,我首先初始化一个VertexPos结构数组,每个结构在立方体的构造函数中都带有XMFLOAT3和XMFLOAT2。然后,RenderCube函数读取这些顶点并将多维数据集显示在屏幕上。
当我在RenderCube函数中声明一个数组(相同类型)时,我的代码完全正常,如下所示:
VertexPos vertices[] = {
{XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f )},
...
问题是,当我尝试从立方体对象中读取顶点[]时,在下面定义和初始化(为简洁起见,下面仅定义了立方体的第一个顶点),在查看立方体时,我在调试器中看到了疯狂的值>顶点,例如:
cube->vertices[0].pos.x=5.736e-039#DEN
RenderCube():
bool Render::RenderCube(Cube* cube)
{
...
D3D11_SUBRESOURCE_DATA resourceData;
ZeroMemory(&resourceData, sizeof(resourceData));
resourceData.pSysMem = cube->vertices;
}
Cube.h
struct VertexPos
{
XMFLOAT3 pos;
XMFLOAT2 tex0;
VertexPos(){}
VertexPos(XMFLOAT3 p, XMFLOAT2 t)
{
pos = p;
tex0 = t;
}
};
class Cube
{
public:
Cube::Cube(LPCWSTR textureFileName);
VertexPos vertices[NUMBER_OF_VERTICES];
LPCWSTR getTextureFileName();
private:
LPCWSTR textureFileName;
};
Cube.cpp:
Cube::Cube(LPCWSTR textureFileName)
{
//set texture
this->textureFileName = textureFileName;
vertices[0] = VertexPos(XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ));
}
LPCWSTR Cube::getTextureFileName(){
return textureFileName;
}
我做错了什么?
答案 0 :(得分:1)
您需要逐个初始化数组中的元素。例如:
VertexPos vertices[3] = {VertexPos(XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ))}
第一个元素顶点[0]将初始化为VertexPos(XMFLOAT3(-1.0f,1.0f,-1.0f),XMFLOAT2(0.0f,0.0f)),但其他元素将使用默认构造函数初始化,因为默认构造函数为空,所以你在结构中获得了垃圾内容。
答案 1 :(得分:1)
我终于得到了它 - 只使用了一个引用来初始化我的立方体向量,而不是一个新的立方体