Exemplo n.º 1
0
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]);
  }
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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);
            }
        }
    }
}