Hello again i resolve problem!.
i make two struct like say SIC Games in previous post.
struct SimpleVertex
{
XMFLOAT3 Pos;
XMFLOAT4 Color;
};
struct MySpecialModels {
SimpleVertex meshData; // <<------------------------------- I dont have Idia, but i cant make it works with pointer like this SimpleVertex *meshData
int COORD_NUMS; // <<------------------------------- I think its low my C++ porgramming skill.
ID3D11Buffer *VertexBuffer;
};
Make Global Vector.
vector <MySpecialModels*> Models_Vector;
In Function called this metods
HRESULT InitGeometry()
{
HRESULT hr = S_OK;
SetShader();
//-----------------------------------------------------------------------------------------------------------------
// Here you must USE your code for download model.!!!
vector <XMFLOAT3> vector_vertex;
vector <XMFLOAT2> vector_texture;
vector <XMFLOAT3> vector_index;
vector <XMFLOAT3> vector_vertex_two;
vector <XMFLOAT2> vector_texture_two;
vector <XMFLOAT3> vector_index_two;
ObjParser objparser, objparser_two;
objparser.ReadFile( "Ship.txt", vector_vertex, vector_texture, vector_index);
objparser_two.ReadFile( "Sphere.txt", vector_vertex_two, vector_texture_two, vector_index_two );
int i;
MySpecialModels *MY_MODEL = new MySpecialModels[vector_vertex.size()];
MySpecialModels *MY_MODEL_TWO = new MySpecialModels[vector_vertex_two.size()];
for ( i = 0; i < vector_vertex_two.size(); i++ )
{
MY_MODEL_TWO.meshData.Pos = vector_vertex_two;
MY_MODEL_TWO.meshData.Color = XMFLOAT4(vector_vertex_two.x, vector_vertex_two.y, vector_vertex_two.z, 0.5f );
}
MY_MODEL_TWO->COORD_NUMS = vector_vertex_two.size();
for ( i = 0; i < vector_vertex.size(); i++ )
{
MY_MODEL.meshData.Pos = vector_vertex;
MY_MODEL.meshData.Color = XMFLOAT4(vector_vertex.x*0.2f*rand(), vector_vertex.y*1.3f*rand(), vector_vertex.z*07.f*rand(), 0.5f );
}
MY_MODEL->COORD_NUMS = vector_vertex.size();
Models_Vector.push_back( MY_MODEL );
Models_Vector.push_back( MY_MODEL_TWO);
// Here you must USE your code for download model.!!!
//-----------------------------------------------------------------------------------------------------------------
D3D11_BUFFER_DESC bd;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = D3D11_USAGE_DEFAULT;
bd.ByteWidth = sizeof( MySpecialModels )* Models_Vector[0]->COORD_NUMS;
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
D3D11_SUBRESOURCE_DATA InitData;
ZeroMemory( &InitData, sizeof(InitData) );
InitData.pSysMem = &Models_Vector[0]->meshData;
hr = g_pd3dDevice->CreateBuffer( &bd, &InitData, &Models_Vector[0]->VertexBuffer );
if (FAILED(hr)) return hr;
ZeroMemory( &bd, sizeof(bd) );
bd.Usage = D3D11_USAGE_DEFAULT;
bd.ByteWidth = sizeof( MySpecialModels )* Models_Vector[1]->COORD_NUMS;
bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
ZeroMemory( &InitData, sizeof(InitData) );
InitData.pSysMem = &Models_Vector[1]->meshData;
hr = g_pd3dDevice->CreateBuffer( &bd, &InitData, &Models_Vector[1]->VertexBuffer );
if (FAILED(hr)) return hr;
g_pImmediateContext->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
//----------------------------------------------
Constant Buffers etc. . . . . .
}
I make mistake when i'll try
Put metod g_pImmediateContext->IASetVertexBuffers( 0, 1, &Models_Vector[0]->VertexBuffer, &stride, &offset ); in init geometry i called him
on Render Function and all works fine now.
P.S if you wanna render difference primitive you need call IASetVertexBuffers in render function.
void Render()
{
float ClearColor[4] = { 0.0f, 0.0f, 1.0f, 1.0f };
g_pImmediateContext->ClearRenderTargetView( g_pRenderTargetView, ClearColor );
// Dept Buffer for correctly rendering
g_pImmediateContext->ClearDepthStencilView( g_pDepthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0 );
g_pImmediateContext->VSSetShader( g_pVertexShader, NULL, 0 );
g_pImmediateContext->PSSetShader( g_pPixelShader, NULL, 0 );
g_pImmediateContext->VSSetConstantBuffers( 0, 1, &g_pConstantBuffer );
UINT stride = sizeof( MySpecialModels );
UINT offset = 0;
//--------------------------------------------------------------------------------------
g_pImmediateContext->IASetVertexBuffers( 0, 1, &Models_Vector[0]->VertexBuffer, &stride, &offset );
SetMatrixes(0,0,1);
g_pImmediateContext->Draw( Models_Vector[0]->COORD_NUMS, 0 );
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
g_pImmediateContext->IASetVertexBuffers( 0, 1, &Models_Vector[1]->VertexBuffer, &stride, &offset );
//SetMatrixes(0,0,2);
//g_pImmediateContext->Draw( Models_Vector[1]->COORD_NUMS, 0 );
SetMatrixes(2,0,0);
g_pImmediateContext->Draw( Models_Vector[1]->COORD_NUMS, 0 );
//--------------------------------------------------------------------------------------
//-----------------------------------------------------------------
// WireFrame
g_pImmediateContext->RSSetState(mWireframeRS);
// WireFrame
//-----------------------------------------------------------------
g_pSwapChain->Present( 0, 0 );
}
I render ship, he includes 108760 Vert 109240 Norm 53979 Tvert and 219248 Triangles. And simple sphere.
Now only need make class for automate this metods.
My example is very simple i dont use in structure texture coord, position scaling etc.
But now i have pointer to continue research DirectX
Thanks all for help.
http://postimg.org/image/6jvwrsob3/ Ship Image. Big.