有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何实时生成简单的2D图形?

在我的脑机接口实习中,我需要在CRT显示器上生成一些快速闪烁的方块(闪烁=在两种颜色之间交替)。显示器的刷新率为85Hz,我们希望这成为瓶颈,这意味着重新绘制所有方块最多需要1000/85=11ms

我最喜欢的GUI/图形编程语言是Java,所以我尝试用AWT制作一个原型,因为它是同步的(不像Swing)。我现在似乎有两个问题:第一个问题是,时间测量表明,即使是9个正方形的重新绘制也需要太长的时间。我的算法采用所需的频率,计算系统应提前重新绘制的时间,然后使用循环(无休眠/等待延迟),每次检查是否达到下一个“时间”,如果达到,则循环所有方块重新绘制。我现在实现它的方式是,正方形是背景颜色为A的面板,包含在另一个背景颜色为B的面板中,由于面板的可见性发生了变化,所以会发生闪烁。我想这比一个一直画矩形的面板要快。 我没有一个像样的评测工具(无法让EclipseTtp或NetBeans分析器工作),所以我不能确定,但我感觉瓶颈实际上不在重新绘制中,而是在循环中(使用条件检查等)。你能推荐我该做什么吗

第二个问题是,似乎正方形是从上到下渲染的。就像它们展开得很快,但仍然很明显。这是不能接受的。但我想知道的是,这是什么原因造成的。是Java/AWT,还是Windows,还是我写的算法太慢

你能推荐一些东西给我试试吗?我更喜欢使用Java,但如果必须的话,我会使用C(或其他什么)


共 (2) 个答案

  1. # 1 楼答案

    (我记得有一次用英国广播公司的微型电视和调色板切换演示了这一点,尽管那将是50 fps而不是85 fps,因为这是一台英国国产电视)

    我会切换到jogl并使用显示列表。他们在Java中获得非常高的fps速率

  2. # 2 楼答案

    我会避免使用任何类型的高级“组件”,如JPanel等。尝试获取表示窗口内容的Graphics2D,并使用其fillRect()方法

    如果做不到这一点,您可能可以在C和OpenGL中很容易地做到这一点rasonly.c是一个标准模板程序,它将OpenGL设置为仅作为“光栅化器”工作,即2D模式。以此为起点,您应该能够运行一些东西来绘制所需的“正方形”,而不会有太多麻烦

    你不能很好地描述你想要的场景,从这个等式听起来,好像你想画100个正方形,每个正方形都有不同的颜色。为了在OpenGL中获得最大的性能,您应该将相同颜色的所有正方形一起绘制,以最小化绘制调用之间的“状态更改”。不过,这可能只是一个纯粹的理论观点,因为在85赫兹下绘制100个二维正方形不应该对OpenGL造成负担

    更新:哦,这么多年过去了,现在你可能需要对以上内容持保留态度,并阅读一些现代教程。事情变了。查找Vulkan API