Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}