0

OSGでテクスチャリングを完全に無効にする必要があります。osg :: stateSetも試しglDisable(GL_TEXTURE_2D)てみましたが、テクスチャを持つノードの中には、テクスチャをレンダリングするものがあります。テクスチャリングをグローバルにオフにする方法はありますか?

少し背景:シーンのオブジェクトカバレッジマップを作成する必要があります。つまり、どのオブジェクトが各表示ピクセルを生成したかを知る必要があります。私は各オブジェクトをフラットカラーでレンダリングし、カラーバッファを読み戻しています。これが、テクスチャリングが私がやろうとしていることを壊す理由です。これを達成する方法について他に何かアイデアはありますか?

4

4 に答える 4

1

Texture2D 属性を設定するときに osg::StateAttribute::OVERRIDE ビットを設定したことを確認しましたか? つまり、次のようなもの

osg::Texture2D*const tex2D = new osg::Texture2D;
ss->setAttributeAndModes( tex2D, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE );

wheressは、テクスチャを持つ可能性のあるすべてのものを網羅するために、シーン グラフ内で十分に高い位置にあるノードのステートセットです。

もちろん、GL_TEXTURE_2D モードまたは下位の Texture2D 属性に osg::StateAttribute::PROTECTED ビットが設定されている場合、OVERRIDE は無視されますが、それが起こらないことがわかっている場合があります。

于 2009-04-30T21:49:21.237 に答える
1

あなたが問題を抱えている理由は、おそらく、特定のノードが osg::StateAttribute::OVERRIDE を使用しているためです。その場合、ツリー全体を実際にトラバースし、テクスチャ レンダリングを停止するノード ビジターを作成できます。非常に粗雑ですが、機能します。

あなたの質問の 2 番目の部分について: 1 つのオプションは、OSG に既に組み込まれている関数を交差に使用することです。目から画面上の各ピクセルに光線を投射し、交差する場所を確認します。非常に遅いですが、動作します確かに:) openGL選択モードもあります(ただし、自分で使用したことがないため、使用がどれほど複雑かはわかりません)-これについては、http://www.openglで読むことができます.org/resources/faq/technical/selection.htm

于 2011-11-11T22:51:51.180 に答える
0

OSG メーリング リストに質問を投稿することを検討しましたか? それは、尋ねるのにはるかに適切な場所のように思えます。

于 2009-03-14T12:17:08.150 に答える
0

osgViewer::Viewer (単一/デフォルトのビューアー) または osgViewer::View を使用していますか? 「t」キーは、osgGA::StateSetManipulator が addEventHandler() で追加されている場合、それらのテクスチャリングを切り替えます。

最終的に呼び出されるのはvoid StateSetManipulator::setTextureEnabled(bool newtexture)です。それがすることは次のとおりです。

unsigned int mode = osg::StateAttribute::OVERRIDE|osg::StateAttribute::OFF;
for( unsigned int ii=0; ii < 4; ii++ )
{
    _stateset->setTextureMode( ii, GL_TEXTURE_1D, mode );
    _stateset->setTextureMode( ii, GL_TEXTURE_2D, mode );
    _stateset->setTextureMode( ii, GL_TEXTURE_3D, mode );
    _stateset->setTextureMode( ii, GL_TEXTURE_RECTANGLE, mode );
    _stateset->setTextureMode( ii, GL_TEXTURE_CUBE_MAP, mode);
}

*_stateset* は上位ノードです (例: Viewer/View->setSceneData()で設定されたルート ノード) 。

于 2011-06-14T16:08:29.690 に答える