osg资料收集 - 图文 联系客服

发布时间 : 星期三 文章osg资料收集 - 图文更新完毕开始阅读

OpenSceneGraph中国讨论区-有您OSG在中国

才更好's Archiver

OpenSceneGraph中国讨论区-有您OSG在中国才更好 ? OpenSceneGraph ? MFC下的抗锯齿问题

forest37 发表于 2008-12-2 10:28 MFC下的抗锯齿问题

osg中设置抗锯齿的方法大多都是这样的吧:

[quote]osg::DisplaySettings* ds = osg::DisplaySettings::instance(); ds->setNumMultiSamples(16);

mViewer->setDisplaySettings(ds);[/quote]

可是这段代码在osgviewerMFC 下不起作用,除非 直接设置 traits->samples=16;

这样可以在窗口初始化时设置抗锯齿,也就是像素采样率,那如何在程序运行时设置抗锯齿呢?请高手们指教

[[i] 本帖最后由 forest37 于 2008-12-2 10:30 编辑 [/i]]

array 发表于 2008-12-2 10:32 试一试osg::Multisample

这是一个渲染属性,赋给场景根节点好了

forest37 发表于 2008-12-2 11:59 我 在窗口初始化时设置 traits->samples=16; 并对根节点进行了如下设置

osg::Multisample* pms=new osg::Multisample;

mRoot->getOrCreateStateSet()->setAttributeAndModes(pms,osg::StateAttribute::OFF); 结果是抗锯齿仍然是开着的,any idea?

array 发表于 2008-12-2 14:57 没有设置Multisample的属性?这个是GL_ARB_multisample扩展的封装,请参看glSampleCoverage函数的用法

还有设置为OFF的话就等于没有设置Multisample了,这时候肯定是窗口初始化的设置有效。

forest37 发表于 2008-12-2 15:59 首先谢谢您的解答

glSampleCoverage是设置采样如何考虑透明度(alpha)的吧

Multisample看上去没什么属性啊,只有一个mode ,这个mode无非是质量优先,速度优先,好像没有设置不采样,或者设置采样率的接口啊。

array 发表于 2008-12-2 16:07 有关glSampleCoverage的用法详情可以参看:

[url]http://www.opengl.org/sdk/docs/man/xhtml/glSampleCoverage.xml[/url]

mode属性不是在什么机器上都可以设置的,,只有nvidia可以

还有请同时开启setMode( GL_MULTISAMPLE, ON );

billong 发表于 2009-7-23 16:12 [quote]没有设置Multisample的属性?这个是GL_ARB_multisample扩展的封装,请参看glSampleCoverage函数的用法

还有设置为OFF的话就等于没有设置Multisample了,这时候肯定是窗口初始化的设置有效。 [size=2][color=#999999]array 发表于 2008-12-2 14:57[/color]

[url=http://bbs.osgchina.org/redirect.php?goto=findpost&pid=5751&ptid=812][img]http://bbs.osgchina.org/images/common/back.gif[/img][/url][/size][/quote]

array大牛

在n卡下只要做一下设置:

在窗口初始化时设置 traits->samples=16; 并对根节点进行了如下设置

osg::Multisample* pms=new osg::Multisample;

pms->setSampleCoverage(1,true);// [i] 属性设置对了吗?[/i]

mRoot->getOrCreateStateSet()->setAttributeAndModes(pms,osg::StateAttribute::ON); 那么mRoot节点下的孩子都有抗锯齿的效果,包括导入的osg模型.。 而在a卡下,就没有抗锯齿的功能????

谢谢了。。。。。

array 发表于 2009-7-23 16:59 A卡对OpenGL的支持差那是出了名的,在开始仿真循环之前用DisplaySettings::instance()->setNumMultiSamples()试一试

billong 发表于 2009-7-26 13:20 [quote]A卡对OpenGL的支持差那是出了名的,在开始仿真循环之前用DisplaySettings::instance()->setNumMultiSamples()试一试 [size=2][color=#999999]array 发表于 2009-7-23 16:59[/color]

[url=http://bbs.osgchina.org/redirect.php?goto=findpost&pid=11649&ptid=812][img]http://bbs.osgchina.org/images/common/back.gif[/img][/url][/size][/quote]

在n卡里怎么setNumMultiSamples(4), 最大只能到4啊。。。8 16什么的 在realize()的时候就建立窗口失败

array 发表于 2009-7-26 14:55 这取决于显卡的支持能力

billong 发表于 2009-7-26 16:31 [b]

[url=http://bbs.osgchina.org/redirect.php?goto=findpost&pid=11726&ptid=812]10#[/url] [i]array[/i] [/b]

我的是9600 gt 支持性这么差》??多重采样这么耗显卡吗??

11月23日

Navy10 - 使用自定义矩阵来放置相机 本章目标:

手动放置相机,以实现场景的观览。

---------------------------------------------------------------------- 设置矩阵的方向和位置

我们可以使用osg::Matrix类来设置矩阵的数据。本章中我们将使用双精度类型的矩阵类osg::Matrixd。要设置矩阵的位置和方向,我们可以使用矩阵类的makeTranslate()和makeRotate()方法。为了方便起见,这两个方法均提供了多种可重载的类型。本例中我们使用的makeRotate()方法要求三对角度/向量值作为输入参数。旋转量由围绕指定向量轴所旋转的角度(表示为弧度值)决定。这里我们简单地选用X,Y,Z直角坐标系作为旋转参照的向量轴。将平移矩阵右乘旋转矩阵后,即可创建一个单一的表示旋转和平移的矩阵。代码如下:

如下是设置场景的代码。此场景包括一个小型的地形和坦克模型。坦克位于(10,10,8)的位置。 int main() {

osg::Node* groundNode = NULL; osg::Node* tankNode = NULL;

osg::Group* root = new osg::Group(); osgProducer::Viewer viewer;

osg::PositionAttitudeTransform* tankXform;

groundNode = osgDB::readNodeFile(\

tankNode = osgDB::readNodeFile(\ // 创建绿色的天空布景。

osg::ClearNode* backdrop = new osg::ClearNode;

backdrop->setClearColor(osg::Vec4(0.0f,0.8f,0.0f,1.0f)); root->addChild(backdrop); root->addChild(groundNode);

tankXform = new osg::PositionAttitudeTransform(); root->addChild(tankXform);

tankXform->addChild(tankNode);

tankXform->setPosition( osg::Vec3(10,10,8) ); tankXform->setAttitude(