查看: 1016|回复: 1

更新回调时如何保留每一帧的内容

[复制链接]

该用户从未签到

发表于 2011-3-25 21:31:18 | 显示全部楼层 |阅读模式
使用更新回调函数,绘制下一帧时,上一帧的内容就被擦除了。现在想实现的功能是:绘制下一帧时,上一帧仍然保留,就好像在纸上作画一样,画下一笔,上一笔画的仍然在纸上保留着。
更新回调类代码如下:
  1. class DynamicCurveCallback:public osg::Drawable::UpdateCallback
  2. {
  3. public:
  4. DynamicCurveCallback():t(0.0){} //构造函数初始化


  5. virtual void update(osg::NodeVisitor *nv, osg::Drawable *drawable)
  6. {
  7. osg::Geometry *geom = dynamic_cast<osg::Geometry*>(drawable);
  8. if(!geom) return;

  9. osg::Vec3Array *vertices = dynamic_cast<osg::Vec3Array*>(geom->getVertexArray());

  10. float a[1][3]={{0.0}};
  11. float b[3][3]={{2.0, -4.0, 2.0},{-3.0, 4.0, -1.0},{1.0, 0.0, 0.0}};
  12. float c[3][2]={{450.0, 10.0},{280.0, 60.0},{200.0, 110.0}}; // 三点定义一条抛物线
  13. float ab[1][3]={{0.0}};
  14. float d[1][2]={{0.0}};
  15. int i;
  16. int j;
  17. int k;
  18. float temp;

  19. if(vertices)
  20. {
  21. for (osg::Vec3Array::iterator itr = vertices->begin(); itr != vertices->end()-1; ++itr)
  22. itr->set((*(itr+1)));


  23. if (t<=1.01)
  24. {
  25. a[0][0] = t*t;
  26. a[0][1] = t;
  27. a[0][2] = 1;
  28. //矩阵a与矩阵b相乘运算得到矩阵ab
  29. for (i = 0; i < 1; i++)
  30. {
  31. for (j = 0; j < 3; j++)
  32. {
  33. temp=0.0;
  34. for (k = 0; k < 3; k++)
  35. {
  36. temp = temp+a[i][k]*b[k][j];
  37. }
  38. ab[i][j] = temp;
  39. }
  40. } //矩阵a与矩阵b运算结束

  41. //矩阵ab与矩阵c相乘得到矩阵d
  42. for(i = 0; i < 1; i++)
  43. {
  44. for (j=0; j<2; j++)
  45. {
  46. temp = 0.0;
  47. for(k=0; k<3; k++)
  48. {
  49. temp = temp + ab[i][j]*c[k][j];
  50. }
  51. d[i][j]=temp;
  52. }
  53. osg::Vec3&pt=vertices->back();
  54. pt.set(d[0][0], 0.0, d[0][1]);
  55. vertices->dirty();
  56. //vertices->push_back();
  57. }
  58. t += 1.0/40.0;
  59. }
  60. Sleep(100);
  61. }
  62. }

  63. protected:
  64. float t;

  65. };
复制代码


求教各位大侠,具体如何修改这个代码从而实现“绘制下一帧时,上一帧仍然保留”的效果呢呢?

该用户从未签到

发表于 2011-3-26 10:30:34 | 显示全部楼层
osg按照传入的顶点,绘制响应的图形。 要保存“上一帧的内容”,这完全取决于你传入的顶点vertices。 显然vertices在每一帧应该保存原来的顶点,并且push_back新的顶点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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