示例#1
0
void Model::processMesh(FbxMesh *mesh, Data &model) {
  int numVerts = mesh->GetControlPointsCount();
  int numIndices = mesh->GetPolygonVertexCount();

  Vertex * pVerts = new Vertex[numVerts];
  int *pIndices = mesh->GetPolygonVertices();

  for (int i = 0; i < numVerts; i++) {
    FbxVector4 currentVert = mesh->GetControlPointAt(i);
    pVerts[i].position = glm::vec3(currentVert[0], currentVert[1], currentVert[2]);
    pVerts[i].colour = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f);
    pVerts[i].texCoords = glm::vec2(0.0f, 0.0f);
    pVerts[i].binormal = glm::vec3(0.0f, 0.0f, 0.0f);
    pVerts[i].tangentNormal = glm::vec3(0.0f, 0.0f, 0.0f);
  }

  //read normal
  processMeshNormals(mesh, pVerts, numVerts);
  processMeshTextureCoords(mesh, pVerts, numVerts);

  //read texture coordinates
  LOG(INFO) << "Vertices " << numVerts << " Indices " << numIndices;

  calculateTagentAndBinormals(pVerts, numVerts, pIndices, numIndices);

  for (int i = 0; i < numVerts; ++i)
    model.model.back()->vertices.push_back(pVerts[i]);

  for (int i = 0; i < numIndices; ++i)
    model.model.back()->indices.push_back(pIndices[i]);

  if (pVerts) {
    delete [] pVerts;
    pVerts = NULL;
  }
}
void processMesh(FbxMesh * mesh, GameObject *go)
{
	Mesh * meshComponent = new Mesh();
	meshComponent->init();

	int numVerts = mesh->GetControlPointsCount();
	int numIndices = mesh->GetPolygonVertexCount();

	Vertex * pVerts = new Vertex[numVerts];
	int *pIndices = mesh->GetPolygonVertices();

	for (int i = 0; i < numVerts; i++)
	{
		FbxVector4 currentVert = mesh->GetControlPointAt(i);
		pVerts[i].position = vec3(currentVert[0], currentVert[1], currentVert[2]);
		pVerts[i].colours = vec4(1.0f, 1.0f, 1.0f, 1.0f);
		pVerts[i].texCoords = vec2(0.0f, 0.0f);
	}

	//read normal
	processMeshNormals(mesh, pVerts, numVerts);
	processMeshTextureCoords(mesh, pVerts, numVerts);

	//read texture coordinates
	std::cout << "Vertices " << numVerts << " Indices " << numIndices << std::endl;

	meshComponent->copyIndexData(numIndices, sizeof(int), (void**)pIndices);
	meshComponent->copyVertexData(numVerts, sizeof(Vertex), (void**)pVerts);

	go->setMesh(meshComponent);
	if (pVerts)
	{
		delete[] pVerts;
		pVerts = NULL;
	}
}