コード例 #1
0
bool StdFileManager::GetUTF8BOMFileString(const str_type::string &fileName, str_type::string &out)
{
	FileBuffer buffer;
	if (GetFileBuffer(fileName, buffer))
	{
		// TODO optimize it
		str_type::stringstream ss;
		unsigned char *adr = buffer->GetAddress();
		for (unsigned long t = 3; t < buffer->GetBufferSize(); t++)
		{
			ss << static_cast<char>(adr[t]);
		}
		out = ss.str();
		return true;
	}
	else
	{
		return false;
	}
}
コード例 #2
0
bool StdFileManager::GetAnsiFileString(const str_type::string &fileName, str_type::string &out)
{
	FileBuffer buffer;
	if (GetFileBuffer(fileName, buffer))
	{
		// TODO optimize it
		str_type::stringstream ss;
		unsigned char *adr = buffer->GetAddress();
		for (unsigned long t = 0; t < buffer->GetBufferSize(); t++)
		{
			const char c = static_cast<char>(adr[t]);
			if (c != 0x0D) // remove all carriage return
				ss << c;
		}
		out = ss.str();
		return true;
	}
	else
	{
		return false;
	}
}
コード例 #3
0
ファイル: OsgMainApp.cpp プロジェクト: annerose/OsgSample
void OsgMainApp::loadModels(){

	//LOGI ("OsgMainApp::loadModels 1111");
    if(_vModelsToLoad.size()==0) return;
	//LOGI ("OsgMainApp::loadModels 22222");
    osg::notify(osg::ALWAYS)<<"There are "<<_vModelsToLoad.size()<<" models to load"<<std::endl;

	LOGI ("OsgMainApp::loadModels _vModelsToLoad.size() %d", _vModelsToLoad.size());
    Model newModel;
    for(unsigned int i=0; i<_vModelsToLoad.size(); i++){
        newModel = _vModelsToLoad[i];
        osg::notify(osg::ALWAYS)<<"Loading: "<<newModel.filename<<std::endl;

        osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile(newModel.filename);
        if (loadedModel == 0) {
            osg::notify(osg::ALWAYS)<<"Model not loaded"<<std::endl;
        } else {
            osg::notify(osg::ALWAYS)<<"Model loaded"<<std::endl;
            _vModels.push_back(newModel);

            loadedModel->setName(newModel.name);



          	osg::Uniform* samUniform = new osg::Uniform(osg::Uniform::SAMPLER_2D,
            			"sam");
            	samUniform->set(0);
           	loadedModel->getOrCreateStateSet()->addUniform(samUniform);

//
//        	osg::Uniform* pUnModelViewProjection = new osg::Uniform(osg::Uniform::FLOAT_MAT4, "gl_ModelViewProjectionMatrix");
//        	loadedModel->getOrCreateStateSet()->addUniform(pUnModelViewProjection);
//
//        	osg::Matrixf  mModelView;
//        	pUnModelViewProjection->get(mModelView);
//
//        	osg::Matrixf  mModelViewInverse;
//        	mModelViewInverse.invert(mModelView);
//
//          	osg::Uniform* pUnModelViewProjectionInverse = new osg::Uniform(osg::Uniform::FLOAT_MAT4, "uModelViewMatrixInverse");
//          	loadedModel->getOrCreateStateSet()->addUniform(pUnModelViewProjectionInverse);

           	long iFileLen = 0;
           	char* pszVertexShader = GetFileBuffer("/sdcard/osg/a.vs", iFileLen);
           	char* pszFragmentShader = GetFileBuffer("/sdcard/osg/a.fs", iFileLen);

            osg::Shader * vshader = new osg::Shader(osg::Shader::VERTEX, pszVertexShader );
            osg::Shader * fshader = new osg::Shader(osg::Shader::FRAGMENT, pszFragmentShader );

            osg::Program * prog = new osg::Program;
            prog->addShader ( vshader );
            prog->addShader ( fshader );

            loadedModel->getOrCreateStateSet()->setAttribute ( prog );

            delete [] pszVertexShader;
            delete [] pszFragmentShader;



//            osg::ref_ptr<osg::Image> image = osgDB::readImageFile("/sdcard/Present3D/sunset.bmp");
//
////        	osg::ref_ptr<osg::Image> image = new osg::Image;
////        	image->allocateImage(256, 256, 4, GL_RGBA, GL_UNSIGNED_BYTE);
////        	image->setInternalTextureFormat(GL_RGBA);
//
//            if (image.get())
//                {
//
////            	unsigned char * pData = image->data();
////            			memset(pData, 255, 256 * 256 * 4);
//
//                    osg::ref_ptr<osg::Texture2D> texture=new osg::Texture2D();
//                    texture->setDataVariance(osg::Object::DYNAMIC);
//                    texture->setImage(image.get());
//
//                    //设置自动生成纹理坐标
//                    osg::ref_ptr<osg::TexGen> texgen=new osg::TexGen();
//                    texgen->setMode(osg::TexGen::SPHERE_MAP);
//
//                    //设置纹理环境,模式为BLEND
//                    osg::ref_ptr<osg::TexEnv> texenv=new osg::TexEnv;
//                    texenv->setMode(osg::TexEnv::ADD);
//                    texenv->setColor(osg::Vec4(0.6,0.6,0.6,0.0));
//
//                    //启动单元一自动生成纹理坐标,并使用纹理
//                    osg::ref_ptr<osg::StateSet> state=new osg::StateSet;
//                    state->setTextureAttributeAndModes(1,texture.get(),osg::StateAttribute::ON);
//                    state->setTextureAttributeAndModes(1,texgen.get(),osg::StateAttribute::ON);
//                    state->setTextureAttribute(1,texenv.get());
//
//                    loadedModel->setStateSet(state.get());
//
//                    LOGE("osgDB::readImageFile ok");
//                }
//            else
//            {
//            	LOGE("osgDB::readImageFile err bmp 3");
//            }



//            osg::ref_ptr<osg::Node> theNode = createNode();

            _trans =new osg::MatrixTransform;
            _trans->setMatrix(osg::Matrix::rotate(0,1,0,0));
           _trans->addChild(loadedModel);
           // _trans->addChild(theNode);





            // 取模型的包围盒
            const osg::BoundingSphere bs = _trans->getBound();
            float radius = bs.radius();

            _xFactor = radius / 100;







           // _root->addChild(loadedModel);
	           _root->addChild(_trans);



        }
    }

    osgViewer::Viewer::Windows windows;
    _viewer->getWindows(windows);
    for(osgViewer::Viewer::Windows::iterator itr = windows.begin();itr != windows.end();++itr)
    {
      (*itr)->getState()->setUseModelViewAndProjectionUniforms(true);
      (*itr)->getState()->setUseVertexAttributeAliasing(true);
    }

    _viewer->setSceneData(NULL);
    _viewer->setSceneData(_root.get());
    _manipulator->getNode();
    _viewer->home();

    _viewer->getDatabasePager()->clear();
    _viewer->getDatabasePager()->registerPagedLODs(_root.get());
    _viewer->getDatabasePager()->setUpThreads(3, 1);
    _viewer->getDatabasePager()->setTargetMaximumNumberOfPageLOD(2);
    _viewer->getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true, true);

    _vModelsToLoad.clear();

}