65.9K
CodeProject 正在变化。 阅读更多。
Home

轻量级实时OpenGL图形组件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (10投票s)

2006年12月20日

LGPL3

1分钟阅读

viewsIcon

79296

downloadIcon

2849

一篇关于集成基于 OpenGL 的图表组件的文章,该组件提供实时更新。

引言

我在编写的一个演示应用程序中需要实时通过图表显示一些统计数据。截图应该清楚地说明这个图表组件背后的想法。它对于希望跟踪实时数据的程序员来说会很有用,例如在数据采集和分析中。我没有时间开发一些真正复杂的东西,比如不同的图表类型、显示选项和过滤器,但是从代码中添加这些功能应该非常容易。

使用代码

这个图表组件的一些特性是:

  • 用于存储图表数据的用户自定义缓存(列表)
  • 当数据“溢出”缓存时,图表会自动丢弃最旧的数据以腾出空间给最新数据
  • 移动平均值是实时计算的

将此代码包含到任何基于 OpenGL 的应用程序中非常容易。程序员只需要确保他/她拥有渲染上下文。

OGLGraph* myGraph;

void init ( GLvoid )     // Create Some Everyday Functions
{
    glClearColor(0.0f, 0.0f, 0.0f, 0.f);
    //glClearDepth(1.0f);            
    myGraph = OGLGraph::Instance();
    myGraph->setup( 500 /*width*/, 100 /*height*/, 
                    10 /*offsetX*/, 10 /*offsetY*/, 
                    2 /*scaleX*/, 2 /*scaleY*/, 
                    1 /*channels*/, 200 /*cache size*/ );
}

void display ( void )   // Create The Display Function
{
    // ... 

    // This is a dummy function. Replace with custom input/data
    float time = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    float value;
    value = 5*sin( 5*time ) + 10.f;

    myGraph->update( value );
    myGraph->draw();
}

源代码可以在 MS VS.NET 2003 中很好地构建。

关注点

您可以在 update() 代码中包含任何过滤器,例如降噪、低通或高通,或者如果您可以使用外部软件(例如 Matlab)来完成此操作,则可以将后处理数据传递到此函数中。

历史

  • 首次发布。
© . All rights reserved.