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();
}