OSG AnisotropicLighting - eiichiromomma/CVMLAB GitHub Wiki

(OSG) AnisotropicLighting

osgFX::AnisotropicLightingについて

※サラっと弄っただけなので深くは未検証

効果

lighting image mapをテクスチャとして読み込み、以下の式で定まる(s,t)を割り振る

s=(N dot H)
t=(N dot L)

Nは頂点の法線ベクトル、Lはライト-頂点のベクトル、Hはhalf-wayベクトル(H=(L+V)/||L+V||, Vは視点ベクトル)。

サンプル

解説は不要な程シンプル。

    #include <osg/Group>
    #include <osgViewer/Viewer>
    #include <osgViewer/ViewerEventHandlers>
    #include <osgDB/ReadFile>
    #include <osgFX/AnisotropicLighting>
    void build_world(osg::Group *root)
    {
      osg::ref_ptr<osg::Image> anisomap = sgDB::readImageFile("anisomap.jpg)");
      osg::ref_ptr<osgFX::AnisotropicLighting> effect = new osgFX::AnisotropicLighting;
      osg::ref_ptr<osg::Node> cessna = osgDB::readNodeFile("cessna.osg");
      effect->setLightingMap(anisomap.get());
      effect->addChild(cessna.get());
      root->addChild(effect.get());
    }
    int main(int argc, char *argv[])
    {
      osg::Group *root = new osg::Group;
      build_world(root);
      osgViewer::Viewer viewer;
      viewer.addEventHandler(new osgViewer::WindowSizeHandler);
      viewer.setSceneData(root);
      return viewer.run();
    }

マップ

スクリーンショット

⚠️ **GitHub.com Fallback** ⚠️