示例#1
0
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;
}
示例#2
0
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);


}
示例#4
0
float ScribbleTouchNode::getPecent()
{
    return calcute(getRender()->newImage())/(restorePixes*1.0f);

}
示例#5
0
		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);
		}
示例#6
0
		virtual void disable(){
			getRender().disableGSTexture(idtexture, idsampler);
		}