0

我正在开发一个简单的程序,首先初始化一组 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

渲染立方体():

bool Render::RenderCube(Cube* cube)
{
...
D3D11_SUBRESOURCE_DATA resourceData;
    ZeroMemory(&resourceData, sizeof(resourceData));
    resourceData.pSysMem = cube->vertices;
}

立方体.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;
};

多维数据集.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;
}

我究竟做错了什么?

4

2 回答 2

1

您需要一一初始化数组中的元素。例如:

VertexPos vertices[3] = {VertexPos(XMFLOAT3( -1.0f,  1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ))}

第一个元素 vertices[0] 将被初始化为 VertexPos(XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f )),但其他元素将使用默认构造函数初始化,如默认构造函数为空,因此您会在结构中获得垃圾内容。

于 2013-10-23T17:24:03.023 回答
1

我终于明白了——只使用一个引用来初始化我的立方体向量,而不是一个新的立方体

于 2013-10-23T17:37:56.080 回答