struct PLANE {FLOAT X, Y, Z; D3DXVECTOR3 Normal; FLOAT U, V;};
class PlaneStruct
{
public:PLANE PlaneVertices[4];
public:DWORD PlaneIndices;
void CreatePlane(float size)
{
// create vertices to represent the corners of the cube
PlaneVertices =
{
{1.0f * size, 0.0f, 1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 0.0f, 0.0f}, // side 1
{-1.0f * size, -0.0f, 1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 0.0f, 1.0f},
{-1.0f * size, -0.0f, -1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 1.0f, 0.0f},
{1.0f * size, -0.0f, -1.0f * size, D3DXVECTOR3(0.0f, 0.0f, 1.0f), 1.0f, 1.0f},
};
// create the index buffer out of DWORDs
DWORD PlaneIndices[] =
{
0, 2, 1, // side 1
0, 3, 2
};
}
};
这是我的“平面”结构的代码,我只有一个问题,如果你看顶部它说PLANE PlaneVertices [4];然后在一个函数我想定义它,所以给它具体的值,但我得到以下错误: 表达式必须是可修改的值。 请帮忙
答案 0 :(得分:2)
在C ++(2003)初始化中,如StructX var = { ... };
只能在定义变量时使用。在您的代码中,PlaneVertices用于赋值表达式。那里不允许初始化语法。这是语法错误。
稍后您将定义一个局部变量PlaneIndices,它将在退出方法后被丢弃。
答案 1 :(得分:0)
您不能像这样为PlaneVertices
数组赋值,只有在使用{}表示法对其进行定义时才能使用它。尝试使用for循环
编辑:在回复您的评论时,创建一个PLANE结构的实例,并为其分配您希望它拥有的值。然后使用
将其分配给PlaneVertices
数组中的第一个索引
PlaneVertices[0] = // instance of PLANE struct you have just created
然后重复数组中剩余的3个PLANE实例,添加到PlaneVertices
的1,2和3个索引。为了充分说明,我将使用您提供的数据为您做第一个
PLANE plane_object;
plane_object.X = 1.0*size;
plane_object.Y = 0.0;
plane_object.Z = 1.0*size;
plane_object.Normal = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
plane_object.U = 0.0;
plane_object.V = 0.0;
PlaneVertices[0] = plane_object;
然后,您需要为要添加的每个PLANE重复此操作。另请参阅有关PlaneIndices问题的其他答案。