⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 materialpalettemanager.cpp

📁 最新osg包
💻 CPP
字号:
/*  * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or (at * your option) any later version. The full license is in the LICENSE file * included with this distribution, and on the openscenegraph.org website. *  * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details.*///// Copyright(c) 2008 Skew Matrix Software LLC.//#include "MaterialPaletteManager.h"#include "DataOutputStream.h"#include "Opcodes.h"#include <osg/Notify>#include <osg/Material>#include <osg/Vec4f>#include <cassert>#include <sstream>namespace flt{MaterialPaletteManager::MaterialPaletteManager( ExportOptions& fltOpt )  : _fltOpt( fltOpt ),    _currIndex( -1 ){    // TODO: Pay attention to the version here(?)}int MaterialPaletteManager::add(osg::Material const* material){    int index = -1;    if (material == NULL) return -1;    // If this material has already been cached, set 'index' to the cached value    MaterialPalette::const_iterator it = _materialPalette.find(material);    if ( it != _materialPalette.end() )    {        index = it->second.Index;    }    // New material? Add it to the cache...    else    {        index = ++_currIndex;        _materialPalette.insert(std::make_pair(material,                                               MaterialRecord(material, index) ) );    }    return index;}voidMaterialPaletteManager::write( DataOutputStream& dos ) const{    using osg::Vec4f;    MaterialPalette::const_iterator it = _materialPalette.begin();    for ( ; it != _materialPalette.end(); ++it)    {        MaterialRecord m = it->second;        Vec4f const& ambient = m.Material->getAmbient(osg::Material::FRONT);        Vec4f const& diffuse = m.Material->getDiffuse(osg::Material::FRONT);        Vec4f const& specular = m.Material->getSpecular(osg::Material::FRONT);        Vec4f const& emissive = m.Material->getEmission(osg::Material::FRONT);        float shininess = m.Material->getShininess(osg::Material::FRONT);        dos.writeInt16( (int16) MATERIAL_PALETTE_OP );        dos.writeInt16( 84 );            // Length - FIXME: hard-code/FLT version?        dos.writeInt32( m.Index );        dos.writeString( m.Material->getName(), 12 );        dos.writeInt32( 0 );             // Flags        dos.writeFloat32(ambient.r() );        dos.writeFloat32(ambient.g() );        dos.writeFloat32(ambient.b() );        dos.writeFloat32(diffuse.r() );        dos.writeFloat32(diffuse.g() );        dos.writeFloat32(diffuse.b() );        dos.writeFloat32(specular.r() );        dos.writeFloat32(specular.g() );        dos.writeFloat32(specular.b() );        dos.writeFloat32(emissive.r() );        dos.writeFloat32(emissive.g() );        dos.writeFloat32(emissive.b() );        dos.writeFloat32(shininess);        dos.writeFloat32( diffuse.a() ); // alpha        dos.writeFloat32(1.0f);       // 'Reserved' - unused        if (m.Material->getAmbientFrontAndBack()   == false   ||            m.Material->getDiffuseFrontAndBack()   == false   ||            m.Material->getSpecularFrontAndBack()  == false   ||            m.Material->getEmissionFrontAndBack()  == false   ||            m.Material->getShininessFrontAndBack() == false )        {            std::string warning( "fltexp: No support for different front and back material properties." );            osg::notify( osg::WARN ) << warning << std::endl;           _fltOpt.getWriteResult().warn( warning );        }    }}}  // End namespace fltexp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -