查看: 1431|回复: 11

osg将 void preMult( const Matrixd& );实现放在什么文件里了?

[复制链接]

该用户从未签到

发表于 2014-10-21 11:55:01 | 显示全部楼层 |阅读模式
Matrixf.h、Matrixd.h、MatrixDecomposition.cpp、Matrix_implementation.cpp都没有呀。。。

该用户从未签到

发表于 2014-10-21 14:29:47 | 显示全部楼层
在Matrix_implementation.cpp好好找一下~

该用户从未签到

 楼主| 发表于 2014-10-23 17:36:47 | 显示全部楼层
buaahc 发表于 2014-10-21 14:29
在Matrix_implementation.cpp好好找一下~

老师呀,我想对g_root节点进行矩阵旋转怎么做呢?

  1. #include <osgViewer/Viewer>
  2. #include <osgDB/ReadFile>
  3. #include <osg/geode>
  4. #include <osg/LineWidth>
  5. #include <osgUtil/Tessellator>
  6. #include <osg/Stencil>
  7. #include <osg//ComputeBoundsVisitor>
  8. #include <osgapex/cleardrawable>
  9. #include <osg/Depth>
  10. #include <osg/MatrixTransform>

  11. #pragma comment(lib,"OpenThreadsd.lib")
  12. #pragma comment(lib,"osgd.lib")
  13. #pragma comment(lib,"osgDBd.lib")
  14. #pragma comment(lib,"osgAPExd.lib")
  15. #pragma comment(lib,"osgGAd.lib")
  16. #pragma comment(lib,"osgUtild.lib")
  17. #pragma comment(lib,"osgTextd.lib")
  18. #pragma comment(lib,"osgSimd.lib")
  19. #pragma comment(lib,"osgViewerd.lib")

  20. int _tmain(int argc, _TCHAR* argv[])
  21. {
  22.         osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
  23.         osg::ref_ptr<osg::Group> g_Root = new osg::Group;
  24.         osg::ref_ptr<osg::Node> pNode = osgDB::readNodeFile("cow.osg");
  25.         osg::ref_ptr<osg::Node> pNode2 = osgDB::readNodeFile("cow.osg");
  26.         osg::ref_ptr<osg::Node> pNode3 = osgDB::readNodeFile("cow.osg");
  27.        
  28.         osg::ref_ptr<osg::Group> g_depth = new osg::Group;
  29.        
  30.         osg::ref_ptr<osg::MatrixTransform> setMat = new osg::MatrixTransform;
  31.         setMat->setMatrix(osg::Matrixd::scale(2,1,2));
  32.         setMat->addChild(pNode);

  33.         osg::ref_ptr<osg::MatrixTransform> setMat2 = new osg::MatrixTransform;
  34.         setMat2->setMatrix(osg::Matrixd::translate(6,1,6));
  35.         setMat2->addChild(pNode2);

  36.         osg::ref_ptr<osg::MatrixTransform> setMat3 = new osg::MatrixTransform;
  37.         setMat3->setMatrix(osg::Matrixd::translate(-6,1,-6));
  38.         setMat3->addChild(pNode3);
  39.         //g_Root->addChild(g_depth);
  40.         g_Root->addChild(setMat);
  41.         g_Root->addChild(setMat2);
  42.         g_Root->addChild(setMat3);


  43.         viewer->setSceneData(g_Root);
  44.         viewer->run();
  45.         return 0;
  46. }

复制代码

该用户从未签到

发表于 2014-10-24 00:31:20 | 显示全部楼层
你再加一个矩阵作为g_Root的父节点啊。。。

该用户从未签到

 楼主| 发表于 2014-10-24 12:00:08 | 显示全部楼层
buaahc 发表于 2014-10-24 00:31
你再加一个矩阵作为g_Root的父节点啊。。。

g_Root已经加到 viewer->setSceneData(g_Root);视图里了。将g_Root加到一个矩阵里,那矩阵类加到那里。。。

该用户从未签到

发表于 2014-10-24 22:35:17 | 显示全部楼层
请阅读基础教材 freesouth的一大堆书。。。

该用户从未签到

发表于 2014-10-24 22:36:13 | 显示全部楼层

mt-》addchild(g_Root)
viewer-》setscenedata(mt)。。。

该用户从未签到

 楼主| 发表于 2014-10-25 17:53:06 | 显示全部楼层
buaahc 发表于 2014-10-24 22:36
mt-》addchild(g_Root)
viewer-》setscenedata(mt)。。。

老师呀。。。我的意思是viewer->setscenedata(g_Root)之后,怎么对g_Root进行矩阵变化? 重写osg::NodeVisitor类吗?

该用户从未签到

发表于 2014-10-27 17:00:37 | 显示全部楼层
给g_Root节点添加矩阵节点M,然后使用更新回调改变M

该用户从未签到

 楼主| 发表于 2014-10-29 23:47:34 | 显示全部楼层
buaahc 发表于 2014-10-27 17:00
给g_Root节点添加矩阵节点M,然后使用更新回调改变M

老师呀。。。我要是。。。
std::Vector<osg::ref_ptf<osg::Node>> v;
osg::ref_ptf<osg::Node>  pNode = new osg::Node;
osg::ref_ptf<osg::Node>  pNode2 = new osg::Node;
v.push(pNode);
v.push(pNode2);
之后Vector里的pNode与pNode2会自动释放吗。。。还是怎么去释放呢。。。

该用户从未签到

 楼主| 发表于 2015-2-27 17:28:16 | 显示全部楼层

老师呀 地形模型挖空一个长方形怎么不行呢。。。。

  1. #include "stdafx.h"
  2. #include <osg/Node>
  3. #include <osg/Geometry>
  4. #include <osg/Geode>
  5. #include <osg/Notify>
  6. #include <osg/MatrixTransform>
  7. #include <osg/Texture2D>
  8. #include <osg/BlendFunc>
  9. #include <osg/Stencil>
  10. #include <osg/ColorMask>
  11. #include <osg/Depth>
  12. #include <osg/ClipNode>
  13. #include <osgDB/ReadFile>
  14. #include <osgDB/WriteFile>
  15. #include <osgUtil/Optimizer>
  16. #include <osgViewer/Viewer>
  17. #include <iostream>
  18. #include <osgUtil/Tessellator>
  19. #pragma comment(lib,"OpenThreadsd.lib")
  20. #pragma comment(lib,"osgd.lib")
  21. #pragma comment(lib,"osgDBd.lib")
  22. #pragma comment(lib,"osgAPExd.lib")
  23. #pragma comment(lib,"osgGAd.lib")
  24. #pragma comment(lib,"osgUtild.lib")
  25. #pragma comment(lib,"osgTextd.lib")
  26. #pragma comment(lib,"osgSimd.lib")
  27. #pragma comment(lib,"osgViewerd.lib")


  28. osg::ref_ptr<osg::Geode> clipPlane = new osg::Geode;
  29. osg::ref_ptr<osg::MatrixTransform> TransMt = new osg::MatrixTransform;
  30. osg::ref_ptr<osg::Group> Group = new osg::Group;
  31. osg::ref_ptr<osg::Group> Root = new osg::Group;
  32. osg::Vec3  transPos;
  33. osg::ref_ptr<osg::Vec3Array> m_VertexV3a = new osg::Vec3Array ;

  34. void CreateGrooveUp(osg::ref_ptr<osg::Vec3Array> pts,osg::ref_ptr<osg::Node> pNode)
  35. {

  36.         osg::Vec3Array::iterator itr = pts->begin();
  37.         transPos = (*itr);

  38.         for(;itr!=pts->end();itr++ )
  39.         {
  40.                 (*itr) = (*itr) - transPos;
  41.         }

  42.         Group->addChild(TransMt);

  43.         osg::Matrix mat;
  44.         mat.setTrans(transPos);
  45.         TransMt->setMatrix(mat);
  46.         TransMt->addChild(clipPlane);

  47.         osg::ref_ptr<osg::Geometry> top_cap = new osg::Geometry;
  48.         clipPlane->addDrawable(top_cap);
  49.         top_cap->setVertexArray(pts);

  50.         osg::Vec4Array* colors = new osg::Vec4Array;
  51.         colors->push_back(osg::Vec4(1,0,0,1));
  52.         top_cap->setColorArray(colors);
  53.         top_cap->setColorBinding(osg::Geometry::BIND_OVERALL);

  54.         top_cap->addPrimitiveSet( new osg::DrawArrays(
  55.                 osg::PrimitiveSet::LINE_LOOP,
  56.                 0,pts->size()));

  57.         osgUtil::Tessellator tess;
  58.         tess.setTessellationType( osgUtil::Tessellator::TESS_TYPE_GEOMETRY );
  59.         tess.setWindingType( osgUtil::Tessellator::TESS_WINDING_POSITIVE );
  60.         tess.retessellatePolygons( *(top_cap.get()) );

  61.         osg::Stencil* stencil = new osg::Stencil;
  62.         stencil->setFunction(osg::Stencil::ALWAYS, 1, ~0u);
  63.         stencil->setOperation(osg::Stencil::KEEP, osg::Stencil::KEEP, osg::Stencil::INCR);
  64.         //int ref = stencil->getFunctionRef();
  65.         //unsigned int mask = stencil->getFunctionMask();
  66.         clipPlane->getOrCreateStateSet()->setAttributeAndModes(stencil, osg::StateAttribute::ON);
  67.         clipPlane->getOrCreateStateSet()->setAttributeAndModes(new osg::Depth(osg::Depth::LESS, 0, 1, false), osg::StateAttribute::ON);
  68.         clipPlane->getOrCreateStateSet()->setMode(GL_CULL_FACE, osg::StateAttribute::OFF);
  69.         clipPlane->getOrCreateStateSet()->setAttributeAndModes(new osg::ColorMask(false, false, false, false));
  70.         clipPlane->setCullingActive(false);
  71.         clipPlane->getOrCreateStateSet()->setRenderBinDetails(-2, "RenderBin");


  72.         osg::Geode* clearDepthNode = new osg::Geode;
  73.         //clearDepthNode->addDrawable(GL_DEPTH_BUFFER_BIT);
  74.         clearDepthNode->getOrCreateStateSet()->setRenderBinDetails(-1, "RenderBin");
  75.         TransMt->addChild(clearDepthNode);
  76.         stencil = new osg::Stencil;
  77.         stencil->setFunction(osg::Stencil::NOTEQUAL, 1, 1);
  78.         pNode->getOrCreateStateSet()->setAttributeAndModes(stencil, osg::StateAttribute::ON);       
  79. }





  80. int _tmain(int argc, _TCHAR* argv[])
  81. {
  82.         m_VertexV3a->push_back(osg::Vec3(-10,10,1));
  83.         m_VertexV3a->push_back(osg::Vec3(10,10,1));
  84.         m_VertexV3a->push_back(osg::Vec3(10,-10,1));
  85.         m_VertexV3a->push_back(osg::Vec3(-10,-10,1));
  86.         osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("subtile.ive");
  87.         CreateGrooveUp(m_VertexV3a,loadedModel);
  88.         Root->addChild(loadedModel);
  89.         Root->addChild(Group);
  90.         osgViewer::Viewer viewer;
  91.         viewer.setUpViewInWindow(100,100,800,800);
  92.         viewer.setSceneData(Root);
  93.         //osg::DisplaySettings::instance()->setMinimumNumStencilBits(8);
  94.         return viewer.run();
  95.         return 0;
  96. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表