void FBXFactory::FillData(ModelData* someData, Model* outData, Effect* aEffect) { VertexIndexWrapper* indexWrapper = new VertexIndexWrapper(); indexWrapper->myFormat = DXGI_FORMAT_R32_UINT; unsigned int* indexData = new unsigned int[someData->myIndexCount]; memcpy(indexData, someData->myIndicies, someData->myIndexCount*sizeof(unsigned int)); indexWrapper->myIndexData = (char*)indexData; indexWrapper->mySize = someData->myIndexCount*sizeof(unsigned int); outData->myIndexBaseData = indexWrapper; VertexDataWrapper* vertexData = new VertexDataWrapper(); someData->myVertexBuffer; int sizeOfBuffer = someData->myVertexCount*someData->myVertexStride*sizeof(float); char* vertexRawData = new char[sizeOfBuffer]; memcpy(vertexRawData, someData->myVertexBuffer, sizeOfBuffer); vertexData->myVertexData = vertexRawData; vertexData->myNumberOfVertices = someData->myVertexCount; vertexData->mySize = sizeOfBuffer; vertexData->myStride = someData->myVertexStride*sizeof(float); outData->myVertexBaseData = vertexData; for (int i = 0; i < someData->myLayout.Size(); ++i) { auto currentLayout = someData->myLayout[i]; D3D11_INPUT_ELEMENT_DESC* desc = new D3D11_INPUT_ELEMENT_DESC(); desc->SemanticIndex = 0; desc->AlignedByteOffset = currentLayout.myOffset; desc->InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; desc->InputSlot = 0; desc->InstanceDataStepRate = 0; if (currentLayout.myType == ModelData::VERTEX_POS) { desc->SemanticName = "POSITION"; desc->Format = DXGI_FORMAT_R32G32B32_FLOAT; } else if (currentLayout.myType == ModelData::VERTEX_NORMAL) { desc->SemanticName = "NORMAL"; desc->Format = DXGI_FORMAT_R32G32B32_FLOAT; } else if (currentLayout.myType == ModelData::VERTEX_UV) { desc->SemanticName = "TEXCOORD"; desc->Format = DXGI_FORMAT_R32G32_FLOAT; } else if (currentLayout.myType == ModelData::VERTEX_BINORMAL) { desc->SemanticName = "BINORMAL"; desc->Format = DXGI_FORMAT_R32G32B32_FLOAT; } else if (currentLayout.myType == ModelData::VERTEX_TANGENT) { desc->SemanticName = "TANGENT"; desc->Format = DXGI_FORMAT_R32G32B32_FLOAT; } else if (currentLayout.myType == ModelData::VERTEX_SKINWEIGHTS) { break; desc->SemanticName = "WEIGHTS"; desc->Format = DXGI_FORMAT_R32G32B32A32_FLOAT; } else if (currentLayout.myType == ModelData::VERTEX_BONEID) { break; desc->SemanticName = "BONES"; desc->Format = DXGI_FORMAT_R32G32B32A32_SINT; } outData->myVertexFormat.Add(desc); } outData->myIsNULLObject = false; Surface surface; surface.SetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); surface.SetIndexCount(someData->myIndexCount); surface.SetVertexStart(0); surface.SetIndexStart(0); surface.SetVertexCount(someData->myVertexCount); surface.SetEffect(aEffect); bool useSRGB = true; for (unsigned int i = 0; i < someData->myTextures.size(); ++i) { auto& currentTexture = someData->myTextures[i]; std::string resourceName; if (currentTexture.myType == DIFFUSE) { resourceName = "DiffuseTexture"; } if (currentTexture.myType == NORMALMAP) { resourceName = "NormalTexture"; useSRGB = false; } if (currentTexture.myType == ROUGHNESS) { resourceName = "RoughnessTexture"; } if (currentTexture.myType == SUBSTANCE) { resourceName = "SubstanceTexture"; } if (currentTexture.myType == AO) { resourceName = "AOTexture"; } surface.SetTexture(resourceName, currentTexture.myFileName, useSRGB); } outData->mySurfaces.Add(surface); }
void Model::InitCube(Effect* aEffect) { myEffect = aEffect; D3D11_INPUT_ELEMENT_DESC vertexDesc[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; D3DX11_PASS_DESC passDesc; myEffect->GetTechnique()->GetPassByIndex(0)->GetDesc(&passDesc); Engine::GetInstance()->GetDevice()->CreateInputLayout(vertexDesc, ARRAYSIZE(vertexDesc), passDesc.pIAInputSignature, passDesc.IAInputSignatureSize, &myVertexLayout); Engine::GetInstance()->GetContex()->IASetInputLayout(myVertexLayout); //0 - 3 (Top) myVertices.Add({ { -1.0f, 1.0f, -1.0f }, { 0.f, 1.f, 0.f }, {0.0f, 0.0f} }); myVertices.Add({ { 1.0f, 1.0f, -1.0f }, { 0.f, 1.f, 0.f }, { 1.0f, 0.0f } }); myVertices.Add({ { 1.0f, 1.0f, 1.0f }, { 0.f, 1.f, 0.f }, { 1.0f, 1.0f } }); myVertices.Add({ { -1.0f, 1.0f, 1.0f }, { 0.f, 1.f, 0.f }, { 0.0f, 1.0f } }); //4 - 7 (Bottom) myVertices.Add({ { -1.0f, -1.0f, -1.0f }, { 0.f, -1.f, 0.f }, { 0.0f, 0.0f } }); myVertices.Add({ { 1.0f, -1.0f, -1.0f }, { 0.f, -1.f, 0.f }, { 1.0f, 0.0f } }); myVertices.Add({ { 1.0f, -1.0f, 1.0f }, { 0.f, -1.f, 0.f }, { 1.0f, 1.0f } }); myVertices.Add({ { -1.0f, -1.0f, 1.0f }, { 0.f, -1.f, 0.f }, { 0.0f, 1.0f } }); //8 - 11 (Left) myVertices.Add({ { -1.0f, -1.0f, 1.0f }, { -1.f, 0.f, 0.f }, { 0.0f, 0.0f } }); myVertices.Add({ { -1.0f, -1.0f, -1.0f }, { -1.f, 0.f, 0.f }, { 1.0f, 0.0f } }); myVertices.Add({ { -1.0f, 1.0f, -1.0f }, { -1.f, 0.f, 0.f }, { 1.0f, 1.0f } }); myVertices.Add({ { -1.0f, 1.0f, 1.0f }, { -1.f, 0.f, 0.f }, { 0.0f, 1.0f } }); //12 - 15 (Right) myVertices.Add({ { 1.0f, -1.0f, 1.0f }, { 1.f, 0.f, 0.f }, { 0.0f, 0.0f } }); myVertices.Add({ { 1.0f, -1.0f, -1.0f }, { 1.f, 0.f, 0.f }, { 1.0f, 0.0f } }); myVertices.Add({ { 1.0f, 1.0f, -1.0f }, { 1.f, 0.f, 0.f }, { 1.0f, 1.0f } }); myVertices.Add({ { 1.0f, 1.0f, 1.0f }, { 1.f, 0.f, 0.f }, { 0.0f, 1.0f } }); //16 - 19 (Front) myVertices.Add({ { -1.0f, -1.0f, -1.0f }, { 0.f, 0.f, -1.f }, { 0.0f, 0.0f } }); myVertices.Add({ { 1.0f, -1.0f, -1.0f }, { 0.f, 0.f, -1.f }, { 1.0f, 0.0f } }); myVertices.Add({ { 1.0f, 1.0f, -1.0f }, { 0.f, 0.f, -1.f }, { 1.0f, 1.0f } }); myVertices.Add({ { -1.0f, 1.0f, -1.0f }, { 0.f, 0.f, -1.f }, { 0.0f, 1.0f } }); //20 - 23 (Back) myVertices.Add({ { -1.0f, -1.0f, 1.0f }, { 0.f, 0.f, 1.f }, { 0.0f, 0.0f } }); myVertices.Add({ { 1.0f, -1.0f, 1.0f }, { 0.f, 0.f, 1.f }, { 1.0f, 0.0f } }); myVertices.Add({ { 1.0f, 1.0f, 1.0f }, { 0.f, 0.f, 1.f }, { 1.0f, 1.0f } }); myVertices.Add({ { -1.0f, 1.0f, 1.0f }, { 0.f, 0.f, 1.f }, { 0.0f, 1.0f } }); #pragma region Indices //Top myVerticeIndices.Add(3); myVerticeIndices.Add(1); myVerticeIndices.Add(0); myVerticeIndices.Add(2); myVerticeIndices.Add(1); myVerticeIndices.Add(3); //Bottom myVerticeIndices.Add(6); myVerticeIndices.Add(4); myVerticeIndices.Add(5); myVerticeIndices.Add(7); myVerticeIndices.Add(4); myVerticeIndices.Add(6); //Left myVerticeIndices.Add(11); myVerticeIndices.Add(9); myVerticeIndices.Add(8); myVerticeIndices.Add(10); myVerticeIndices.Add(9); myVerticeIndices.Add(11); //Right myVerticeIndices.Add(14); myVerticeIndices.Add(12); myVerticeIndices.Add(13); myVerticeIndices.Add(15); myVerticeIndices.Add(12); myVerticeIndices.Add(14); //Front myVerticeIndices.Add(19); myVerticeIndices.Add(17); myVerticeIndices.Add(16); myVerticeIndices.Add(18); myVerticeIndices.Add(17); myVerticeIndices.Add(19); //Back myVerticeIndices.Add(22); myVerticeIndices.Add(20); myVerticeIndices.Add(21); myVerticeIndices.Add(23); myVerticeIndices.Add(20); myVerticeIndices.Add(22); #pragma endregion InitBuffers(VertexType::POS_NORM_UV); Surface surf; surf.SetEffect(myEffect); surf.SetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); surf.SetVertexStart(0); surf.SetVertexCount(myVertices.Size()); surf.SetIndexStart(0); surf.SetIndexCount(myVerticeIndices.Size()); surf.SetTexture("DiffuseTexture", "Data/resources/texture/seafloor.dds", true); mySurfaces.Add(surf); }