3Dのオブジェクトの配置を木構造で記録するフォーマットと、それを操作するC++のライブラリだそうです。
http://
初代PlayStation の時には、LightWave 3Dを使ってました。その書き出しファイルをPlayStationの描画コマンドに変換して使うという感じ。
PS2の時には、Open/GLが実はついていた。Silcon Graphics のGLから派生した規格なけなんだけど... Open/GLはゴミだと思う。まぁ、Raw level interface だってのはそうなんだけど、
glClearColor( 0.0, 0.0, 0.0, 1.0 );
glBegin( GL_QUADS );
glColor3fv(color[0]);
ってわけで、gl->clearColor() とかいう形式でさえない。Begin/End ってことは、後ろに隠れたスタックとかキューとかがあるってことだろ? ハンガリー記法もなんだかなぁ。実は、3Dグラフィックスはfloat/doubleに敏感なので便利だったりはするんだが。
ってなわけなので、XMLを使った独自の3D記述を実装して使ってました。
PS3 では、Open/GL実装なOSMesa を使わざるを得ない。もっとも、Open/GLを使うことにすれば、それの上位ライブラリはいろいろある。OpenSceneGraph もそんなものです。
C++ ってのがいまいちなんだが、それほど、ひどい使い方はしてない。C++ってのは、朴訥に使うものなんだよ。つまり、Template とかoperator override とか、auto_ptrホゲで、「お前たちにはわからないだろ」的な使い方はしてないってこと。
geom->setNormalArray(normals);
geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,coordInd
ices->size()));
ってな感じ。名前空間が汚れまくる(module 化されているとは言え...)のは、C++の原理的な欠点だな。このあたりは、メタプログラミングが必須という気はする。
SceneGraph 自体は、VRML的な構文になっている。VRMLも見た時には「えぇ〜?」という印象があって、一応、PS用のVRML viewerは作ってもらったんだけど、結局、捨てちゃったんだよな。
Geode {
UniqueID Geode_0
DataVariance DYNAMIC
name "glider.osg"
cullingActive TRUE
num_drawables 6
Geometry {
DataVariance DYNAMIC
StateSet {
UniqueID StateSet_1
DataVariance STATIC
rendering_hint OPAQUE_BIN
renderBinMode INHERIT
Java3DのSceneGraph も悪くない。こっちは、XMLらしい。Readerを作るのは簡単そうだ。
4年次に作ってもらっているものもあるので、このあたりは、いろいろできそう。
もっとも、現在のネックは、OSMesaのスピードなので、それをなんとかしないとダメなんだが...
No comments:
Post a Comment