查看: 1962|回复: 7

求教:如何快速绘制每帧都动态变化的大量字体

[复制链接]

该用户从未签到

发表于 2013-1-7 13:21:08 | 显示全部楼层 |阅读模式
尽管OSG给出了简单的静态构建和绘制字体的例程,但是还是解决不了实际项目遇到的问题。如图:

坐标轴标签绘制

坐标轴标签绘制
坐标轴刻度标注的绘制,每帧都需要更新MV模型视图矩阵,标注(字体osgText)的位置、文本内容以及标注数量(几十到上百个)都是动态变化的。那么场景该如何构建,数据又如何实时更新呢?
    另外关于array提到的Draw Instanced技术,似乎也解决不好此问题。当绘制的物体时静态的时候,实例化能工作得最好。如果物体是不停移动的,你每帧都需要更新世界矩阵,这样实例化优势就降低了。我的理解是否正确?

该用户从未签到

发表于 2013-1-8 08:28:33 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2013-1-8 08:29 编辑

跟移动有什么关系?就算你不移动,每一帧都要根据modelview从新计算,再说你这玩意也不是同一个ID,考虑VBO或者其他的方案
    A common use case in GL for some applications is to be able to
    draw the same object, or groups of similar objects that share
    vertex data, primitive count and type, multiple times.  This
    extension provides a means of accelerating such use cases while
    restricting the number of API calls, and keeping the amount of
    duplicate data to a minimum.
   
    This extension introduces two draw calls which are conceptually
    equivalent to a series of draw calls.  Each conceptual call in
    this series is considered an "instance" of the actual draw call.
   
    This extension also introduces a read-only built-in variable to
    GLSL which contains the "instance ID."  This variable initially
    contains 0, but increases by one after each conceptual draw call.

    By using the instance ID or multiples thereof as an index into
    a uniform array containing transform data, vertex shaders can
    draw multiple instances of an object with a single draw call.

该用户从未签到

 楼主| 发表于 2013-1-8 09:14:16 | 显示全部楼层
利用VBO来解决大量字体,恐怕不合适吧。关键是随着旋转、缩放,坐标轴刻度和字体都是实时变化的,如果每帧都要生成上百个新的osgText,这也不是好的方法。

该用户从未签到

发表于 2013-1-8 09:23:23 | 显示全部楼层
ogl 发表于 2013-1-8 09:14
利用VBO来解决大量字体,恐怕不合适吧。关键是随着旋转、缩放,坐标轴刻度和字体都是实时变化的,如果每帧都 ...

试过了?vbo是更新,不是创建,resuse 也可以考虑

该用户从未签到

 楼主| 发表于 2013-1-8 09:48:20 | 显示全部楼层
Geometry和Text都是Drawable的派生类。仅Geometry具有VBO特性没错void setUseVertexBufferObjects(bool flag),而Text我并没有看出跟VBO有啥联系

该用户从未签到

发表于 2013-1-8 10:05:55 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2013-1-8 10:06 编辑

resuse可以考虑一下,或者其他更好的方案

该用户从未签到

发表于 2013-1-8 10:28:21 | 显示全部楼层
创建后难道不能更新文字么?是可以的
创建后一定要全部重新生成osgText么?上一次生成的osgText还可以用啊,多退少补就行了。

该用户从未签到

发表于 2013-1-9 11:09:24 | 显示全部楼层
可以直接重新setText,只是注意这样的Text对象要设置为DYNAMIC
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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