void Magic3D::Object::updateMatrix() { if (getRigidBody()) { btTransform transform; getRigidBody()->getMotionState()->getWorldTransform(transform); btQuaternion q = transform.getRotation(); btVector3 v = transform.getOrigin(); if (getShapeRotation().getX() != 0.0f || getShapeRotation().getY() != 0.0f || getShapeRotation().getZ() != 0.0f) { rotation = Quaternion(q.getX(), q.getY(), getRender() == eRENDER_2D ? -q.getZ() : q.getZ(), q.getW()); } if (getRender() == eRENDER_2D) { position = Vector3((v.getX() + 1.0f - 1.0f), -(v.getY() + 1.0f - 1.0f), 0.0f); } else { position = Vector3(v.getX(), v.getY(), v.getZ()); } matrix = Matrix4(rotation, position) * Matrix4(Matrix3::identity(), -getShapePosition()); } else { matrix = Matrix4(rotation, position); } matrix = appendScale(matrix, scale); upward = matrix.getCol1().getXYZ(); forward = matrix.getCol2().getXYZ(); rightward = cross(forward, upward); std::vector<Object*>::const_iterator it_o = children.begin(); while (it_o != children.end()) { (*it_o++)->needTransform = true; } if (isNetworkSpawn()) { Network::getInstance()->sendObject(this, false); } needUpdateOctree = true; }
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; }
SDReflectionMapping::SDReflectionMapping(SDCar *c):car(c){ SDRender * render = (SDRender *)getRender(); osg::ref_ptr<osg::Node> m_sceneroot = render->getRoot(); osg::ref_ptr<osg::TextureCubeMap> reflectionMap; reflectionMap = new osg::TextureCubeMap; this->reflectionMap =reflectionMap; reflectionMap->setTextureSize( 256, 256 ); reflectionMap->setInternalFormat( GL_RGB); reflectionMap->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_EDGE); reflectionMap->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE); reflectionMap->setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP_TO_EDGE); reflectionMap->setFilter(osg::TextureCubeMap::MIN_FILTER,osg::TextureCubeMap::LINEAR); reflectionMap->setFilter(osg::TextureCubeMap::MAG_FILTER,osg::TextureCubeMap::LINEAR); camerasRoot = new osg::Group; for(int i=0;i<6;i++){ osg::ref_ptr<osg::Camera> camera = new osg::Camera; camera->setViewport( 0, 0, 256, 256 ); camera->setClearMask( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); //camera->setClearColor(osg::Vec4(0.0,0.0,0.0,1.0)); camera->setRenderOrder( osg::Camera::PRE_RENDER ); camera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT ); camera->attach( osg::Camera::COLOR_BUFFER, reflectionMap,0,i ); camera->setReferenceFrame( osg::Camera::ABSOLUTE_RF ); camera->addChild( m_sceneroot ); // camera->setPreDrawCallback(pre_cam); // camera->setPostDrawCallback(post_cam); //camera->setProjectionMatrixAsOrtho(,1,-1,1,0,1000000); camera->setProjectionMatrixAsPerspective(90.0,1.0,1.0,1000000.0); //camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR); camerasRoot->addChild(camera); cameras.push_back(camera); //camera->setNodeMask(0); } //ACTIVATE to enable Environment MApping <= temporary hack. //SDScreens * screens = (SDScreens*)getScreens(); //screens->registerViewDependantPreRenderNode(this->getCamerasRoot()); //cameras[4]->setNodeMask(1); }
float ScribbleTouchNode::getPecent() { return calcute(getRender()->newImage())/(restorePixes*1.0f); }
virtual void set(const void* value, size_t s, size_t n){ if (n == 0) getRender().enableGSTexture(idtexture, idsampler, (BaseTexture*)value); else getRender().enableGSTexture(idtexture, idsampler, (BaseRenderTexture*)value); }
virtual void disable(){ getRender().disableGSTexture(idtexture, idsampler); }