Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量中的独立对象位置_C++_Arrays_Vector_Directx 11 - Fatal编程技术网

C++ 向量中的独立对象位置

C++ 向量中的独立对象位置,c++,arrays,vector,directx-11,C++,Arrays,Vector,Directx 11,我使用的是DirectX 11,目前用户可以将对象放置在站立的立方体上 我有一个这样的向量- std::vector<Cube> cubes; 这确实会向矢量添加一个新的立方体,但在移动后,所有以前的立方体位置都会覆盖到当前摄影机位置,使其看起来只有一个立方体被创建,并且每次按下按钮时都会简单地移动到摄影机位置 下面是我的控制台窗口的屏幕截图,以演示问题: 我还有一个迭代器,在设置了单独的世界matrtix之后,调用所有的cubes draw函数 非常感谢您的帮助 编辑 立方体

我使用的是DirectX 11,目前用户可以将对象放置在站立的立方体上

我有一个这样的向量-

 std::vector<Cube> cubes; 
这确实会向矢量添加一个新的立方体,但在移动后,所有以前的立方体位置都会覆盖到当前摄影机位置,使其看起来只有一个立方体被创建,并且每次按下按钮时都会简单地移动到摄影机位置

下面是我的控制台窗口的屏幕截图,以演示问题:

我还有一个迭代器,在设置了单独的世界matrtix之后,调用所有的cubes draw函数

非常感谢您的帮助

编辑

立方体类是这样的-

Cube.h

#include "d3dUtil.h"
#include "GameTimer.h"
#include <string>
#include "Point3f.h"
//-- simple vertex structure
struct Vertex
{
XMFLOAT3 Pos;
XMFLOAT4 Color;
};

 class Cube{

public:

Cube();
~Cube();

public:
void Init(ID3D11Device* device, ID3D11DeviceContext* deviceContext);
void SetOffset(float x, float y, float z);
Point3f GetOffset();

void BuildGeometryBuffers();
void Draw();

XMFLOAT4X4 world;

private:

//-- Vertex and Index Buffers
ID3D11Buffer* mCubeVB;
ID3D11Buffer* mCubeIB;

ID3D11Device* md3dDevice;
ID3D11DeviceContext* md3dDeviceContext;

Point3f mPosition;
  };

您可能正在设置它们各自的世界矩阵,但您从未阅读过它们。您必须将此矩阵添加到着色器。

您需要显示使用立方体的定义。立方体类现在闻起来像是立方体位置的全局变量,或者是通过立方体数组的错误循环。显然,无法在此处粘贴代码,但我在调用绘图函数时设置了它们,如world=XMLoadFloat4x4&Cube->world;这是在循环中完成的,循环遍历所有多维数据集。然后,在绘制之前使用SetMatrix设置矩阵
Cube.h

#include "d3dUtil.h"
#include "GameTimer.h"
#include <string>
#include "Point3f.h"
//-- simple vertex structure
struct Vertex
{
XMFLOAT3 Pos;
XMFLOAT4 Color;
};

 class Cube{

public:

Cube();
~Cube();

public:
void Init(ID3D11Device* device, ID3D11DeviceContext* deviceContext);
void SetOffset(float x, float y, float z);
Point3f GetOffset();

void BuildGeometryBuffers();
void Draw();

XMFLOAT4X4 world;

private:

//-- Vertex and Index Buffers
ID3D11Buffer* mCubeVB;
ID3D11Buffer* mCubeIB;

ID3D11Device* md3dDevice;
ID3D11DeviceContext* md3dDeviceContext;

Point3f mPosition;
  };
#include "Cube.h"

 //-- Constructor
 Cube::Cube(){


 }

 //-- Deconstructor
 Cube::~Cube(){
//-- safely release
ReleaseCOM(mCubeVB);
ReleaseCOM(mCubeIB);
 }

 void Cube::Init(ID3D11Device* device, ID3D11DeviceContext* deviceContext)
 {
md3dDevice = device;
md3dDeviceContext = deviceContext;

//-- define vectors and indices 
BuildGeometryBuffers();

 }
 void Cube::SetOffset(float x, float y, float z)
 { 
 mPosition.x =  x;
 mPosition.y =  y;
 mPosition.z =  z;

 }
   Point3f Cube::GetOffset()
   {
 return mPosition;
  }
void Cube::BuildGeometryBuffers()
{
//-- Create vertex buffer
Vertex vertices[] =
{
    { XMFLOAT3(-1.0f, -1.0f, -1.0f), (const float*)&Colors::White   },
    { XMFLOAT3(-1.0f, +1.0f, -1.0f), (const float*)&Colors::Black   },
    { XMFLOAT3(+1.0f, +1.0f, -1.0f), (const float*)&Colors::Red     },
    { XMFLOAT3(+1.0f, -1.0f, -1.0f), (const float*)&Colors::Green   },
    { XMFLOAT3(-1.0f, -1.0f, +1.0f), (const float*)&Colors::Blue    },
    { XMFLOAT3(-1.0f, +1.0f, +1.0f), (const float*)&Colors::Yellow  },
    { XMFLOAT3(+1.0f, +1.0f, +1.0f), (const float*)&Colors::Cyan    },
    { XMFLOAT3(+1.0f, -1.0f, +1.0f), (const float*)&Colors::Magenta }
};

D3D11_BUFFER_DESC vbd;                      //-- Holds the vertex buffer resource description
vbd.Usage = D3D11_USAGE_IMMUTABLE;          //-- Only accessable by GPU
vbd.ByteWidth = sizeof(Vertex) * 8;         //-- Size of buffer
vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;   //-- Bind the buffer as a vertex buffer to the input-assembler stage of the pipeline
vbd.CPUAccessFlags = 0;                     //-- No CPU access
vbd.MiscFlags = 0;
vbd.StructureByteStride = 0;

D3D11_SUBRESOURCE_DATA vinitData;           //-- Holds subresource data
vinitData.pSysMem = vertices;               //-- Use the vertices as initialisation data
HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mCubeVB)); //-- Create final buffer using all information


//-- Create the index buffer
UINT indices[] = {

    0, 1, 2,        //-- Front face
    0, 2, 3,

    4, 6, 5,        //-- Back face
    4, 7, 6,

    4, 5, 1,        //-- Left face
    4, 1, 0,

    3, 2, 6,        //-- right face
    3, 6, 7,

    1, 5, 6,        //-- top face
    1, 6, 2,

    4, 0, 3,        //-- bottom face
    4, 3, 7
};

D3D11_BUFFER_DESC ibd;                      //-- index buffer description, simple to vertex buffer
ibd.Usage = D3D11_USAGE_IMMUTABLE;
ibd.ByteWidth = sizeof(UINT) * 36;          //-- 36 indices
ibd.BindFlags = D3D11_BIND_INDEX_BUFFER;
ibd.CPUAccessFlags = 0;
ibd.MiscFlags = 0;
ibd.StructureByteStride = 0;

D3D11_SUBRESOURCE_DATA iinitData;
iinitData.pSysMem = indices;
HR(md3dDevice->CreateBuffer(&ibd, &iinitData, &mCubeIB)); //-- create final index buffer using all information
}

void Cube::Draw()
{
UINT stride = sizeof(Vertex);
UINT offset = 0;
//-- Set the created buffers
md3dDeviceContext->IASetVertexBuffers(0, 1, &mCubeVB, &stride, &offset);
md3dDeviceContext->IASetIndexBuffer(mCubeIB, DXGI_FORMAT_R32_UINT, 0);

//-- Draw the cube
md3dDeviceContext->DrawIndexed(36, 0, 0);
}