TriangleMesh::TriangleMesh(domTrianglesRef triangles) { const domInputLocalOffset_Array trianglesInputArray = triangles->getInput_array(); size_t vertexOffset, normalOffset; for (size_t m = 0; m < trianglesInputArray.getCount(); m++) { const domInputLocalOffsetRef trianglesInput = trianglesInputArray[m]; const xsNMTOKEN trianglesInputSemantic = trianglesInput->getSemantic(); if (!strcmp(trianglesInputSemantic, "VERTEX")) { const domVerticesRef src = daeSafeCast<domVertices>(trianglesInput->getSource().getElement()); const domInputLocal_Array verticesInputArray = src->getInput_array(); for (size_t n = 0; n < verticesInputArray.getCount(); n++) { const domInputLocalRef verticesInput = verticesInputArray[n]; const xsNMTOKEN verticesInputSemantic = verticesInput->getSemantic(); if (!strcmp(verticesInputSemantic, "POSITION")) { const domSourceRef src = daeSafeCast<domSource>(verticesInput->getSource().getElement()); parseCoordinateSource(&posArray, src, 1.f); } } vertexOffset = trianglesInput->getOffset(); } else if (!strcmp(trianglesInputSemantic, "NORMAL")) { const domSourceRef src = daeSafeCast<domSource>(trianglesInput->getSource().getElement()); parseCoordinateSource(&normalArray, src, 0.f); normalOffset = trianglesInput->getOffset(); } } const domListOfUInts origInds = triangles->getP()->getValue(); for (int i = 0; i < 3*triangles->getCount(); i++) { inds.append(origInds[i*trianglesInputArray.getCount()+vertexOffset]); inds.append(origInds[i*trianglesInputArray.getCount()+normalOffset]); } }
TriangleMesh::TriangleMesh(domTrianglesRef triangles, const char *desiredEffect) : effect(desiredEffect) { const domInputLocalOffset_Array trianglesInputArray = triangles->getInput_array(); size_t vertexOffset, normalOffset, texcoordOffset, colorOffset; bool foundtexcoord = false, foundcolor = false; for (size_t m = 0; m < trianglesInputArray.getCount(); m++) { const domInputLocalOffsetRef trianglesInput = trianglesInputArray[m]; const xsNMTOKEN trianglesInputSemantic = trianglesInput->getSemantic(); if (!strcmp(trianglesInputSemantic, "VERTEX")) { const domVerticesRef src = daeSafeCast<domVertices>(trianglesInput->getSource().getElement()); const domInputLocal_Array verticesInputArray = src->getInput_array(); for (size_t n = 0; n < verticesInputArray.getCount(); n++) { const domInputLocalRef verticesInput = verticesInputArray[n]; const xsNMTOKEN verticesInputSemantic = verticesInput->getSemantic(); if (!strcmp(verticesInputSemantic, "POSITION")) { const domSourceRef src = daeSafeCast<domSource>(verticesInput->getSource().getElement()); parseCoordinateSource(&posArray, src); } } vertexOffset = trianglesInput->getOffset(); } else if (!strcmp(trianglesInputSemantic, "NORMAL")) { const domSourceRef src = daeSafeCast<domSource>(trianglesInput->getSource().getElement()); parseCoordinateSource(&normalArray, src); normalOffset = trianglesInput->getOffset(); } else if (!strcmp(trianglesInputSemantic, "TEXCOORD")) { const domSourceRef src = daeSafeCast<domSource>(trianglesInput->getSource().getElement()); parseTexcoordSource(&texcoordArray, src); texcoordOffset = trianglesInput->getOffset(); foundtexcoord = true; } else if (!strcmp(trianglesInputSemantic, "COLOR")) { const domSourceRef src = daeSafeCast<domSource>(trianglesInput->getSource().getElement()); parseColorSource(&colorArray, src); colorOffset = trianglesInput->getOffset(); foundcolor = true; } } if (!foundtexcoord) texcoordArray.append2(0.f, 0.f); if (!foundcolor) colorArray.append4(1.f, 1.f, 1.f, 1.f); const domListOfUInts origInds = triangles->getP()->getValue(); for (int i = 0; i < 3*triangles->getCount(); i++) { inds.append(origInds[i*trianglesInputArray.getCount()+vertexOffset]); inds.append(origInds[i*trianglesInputArray.getCount()+normalOffset]); inds.append(foundtexcoord ? origInds[i*trianglesInputArray.getCount()+texcoordOffset] : 0); inds.append(foundcolor ? origInds[i*trianglesInputArray.getCount()+colorOffset] : 0); } material = triangles->getMaterial(); }
void getJointNames(const domSkin* skin, std::vector<std::string>& list) { const domSkin::domJointsRef& joints = skin->getJoints(); const domInputLocal_Array& inputArray = joints->getInput_array(); size_t inputCount = inputArray.getCount(); for (size_t i = 0; i < inputCount; ++i) { const domInputLocalRef input = inputArray.get(i); const char* semantic = input->getSemantic(); if (strcmp(semantic, "JOINT") == 0) { daeElement* sourceElement = input->getSource().getElement(); if (sourceElement) { const domSourceRef source = daeSafeCast<domSource>(sourceElement); getJointNames(source, list); } } } }