Magic3D::XMLElement* Magic3D::Object::save(XMLElement* root) { if (root) { saveString(root, M3D_OBJECT_XML_NAME, getName()); saveString(root, M3D_OBJECT_XML_SCRIPT, getScript()); saveString(root, M3D_OBJECT_XML_PARENT, getParent() ? getParent()->getName().c_str() : M3D_XML_NULL); saveString(root, M3D_OBJECT_XML_PARENT_BONE, getParentBone() ? getParentBone()->getName().c_str() : M3D_XML_NULL); saveBool(root, M3D_OBJECT_XML_PARENT_POSITION, isParentPosition()); saveBool(root, M3D_OBJECT_XML_PARENT_ROTATION, isParentRotation()); saveBool(root, M3D_OBJECT_XML_PARENT_SCALE, isParentScale()); saveInt(root, M3D_OBJECT_XML_RENDER, getRender()); saveInt(root, M3D_OBJECT_XML_TYPE, getType()); saveInt(root, M3D_OBJECT_XML_FLAG, getFlag()); saveInt(root, M3D_OBJECT_XML_BILLBOARD, getBillboard()); saveBool(root, M3D_OBJECT_XML_ENABLED, isEnabled()); saveBool(root, M3D_OBJECT_XML_VISIBLE, isVisible()); saveBool(root, M3D_OBJECT_XML_ZORDER, isZOrder()); saveBool(root, M3D_OBJECT_XML_PICK, isPickable()); saveVector3(root, M3D_OBJECT_XML_POSITION, getPosition()); saveVector4(root, M3D_OBJECT_XML_ROTATION, Vector4(getRotation())); saveVector3(root, M3D_OBJECT_XML_SCALE, getScale()); saveBool(root, M3D_OBJECT_XML_SCRIPTED, isScripted()); std::vector<Mesh*>::const_iterator it_m = meshes.begin(); while (it_m != meshes.end()) { Mesh* mesh = *it_m++; XMLElement* meshtXML = root->GetDocument()->NewElement( M3D_MESH_XML ); meshtXML->SetAttribute("materials", (int)mesh->getMaterials()->size()); root->LinkEndChild( meshtXML ); mesh->save(meshtXML); } PhysicsObject::save(root); } return root; }
void Mesh::drawPicking(ICamera& camera) { if (isPickable()) { mProgram->use(); core::Uniform::push(mULCModelMatrix, mPhysicsMMC); core::Uniform::push(mULCCameraPosition, camera.getTranslation()); core::Uniform::push(mULCViewProjectionMatrix, camera.getViewProjection()); core::Uniform::push(mULCColorPicking, true); core::Uniform::push(mULCPainterColor, glm::vec4(getPickableColor(), 1.0)); mVAO->bind(); onDraw(); core::VertexArray::unbindVAO(); core::Uniform::push(mULCColorPicking, false); core::Program::disusePrograms(); } }