没有用于处理草图的平滑动画,而是正常的GPU / CPU负载和帧速率

时间:2014-01-05 21:12:21

标签: performance processing interactive

我正在研究交互式安装的可视化,如下所示:http://vimeo.com/78977964。但是我遇到了动画平滑的一些问题。虽然它告诉我它以稳定的30或60 fps运行,但实际图像根本不平滑;想象一个15fps动画,时钟不稳定。你们能不能给我一些关于优化素描的地方的指示?

我正在做的是通过oscP5接收相对坐标(在x和y轴上为0.-1。)。这将通过数据处理程序检查该区域中是否有输入x时间。如果一切正常,则会创建一个新的 Wave 对象,该对象将在其位置绘制一个扩展(调制)圆圈。由于安装必须非常灵活,所有可视参数都可通过controlP5 GUI进行调整。

所有这一切都在一台带有 i7 3770 3.4Ghz,8 GB RAm 和两台 Radeon HD7700 的计算机上运行,​​通过VGA驱动4到10台Panasonic EX600 XGA投影机(只需绘制一个3072x1536窗口)。 CPU和GPU负载是合理的(http://imgur.com/a/usNVC),但性能不是我们想要的。

我们尝试了许多解决方案,包括:改变渲染模式;尝试不同的GPU;不同的绘图方法;改变过程优先权;出口到申请;但似乎没有任何改进。所以现在我猜测它只是处理/ java无法在多​​个监视器上顺利运行,或者在我的代码中导致这种情况......

我如何在wave类中绘制波形(这是从每个波形对象的主绘制循环中调用的)

public void draw(){

this.diameter = map(this.frequency, lowLimitFrequency, highLimitFrequency, speedLowFreq, speedHighFreq) * (millis()-date)/5f;

strokeWeight(map(this.frequency, lowLimitFrequency, highLimitFrequency, lineThicknessLowFreq, lineThicknessHighFreq)*map(this.diameter, 0, this.maxDiameter, 1., 0.1)*50);

stroke(255,255,255, constrain((int)map(this.diameter, 0, this.maxDiameter, 255, 0),0,255));

pushMatrix();
beginShape();

translate(h*this.x*width, v*this.y*height);

//this draws a circle from line segments, and is modified by a sinewave
for (int i = 0;i<segments;i++) {

  vertex(
  (this.distortion*sin(map(i, 0, segments, 0, this.periods*TWO_PI))+1)* this.diameter*sin(i*TWO_PI/segments), 
  (this.distortion*sin(map(i, 0, segments, 0, this.periods*TWO_PI))+1)* this.diameter* cos(i*TWO_PI/segments)
    );
}
vertex(
(this.distortion*sin(map(0, 0, segments, 0, this.periods*TWO_PI))+1)* this.diameter*sin(0*TWO_PI/segments), 
(this.distortion*sin(map(0, 0, segments, 0, this.periods*TWO_PI))+1)* this.diameter* cos(0*TWO_PI/segments)
  );


endShape();
popMatrix();

}

我希望我已经提供了足够的信息来掌握哪里出错了!

1 个答案:

答案 0 :(得分:1)

我和我的同事在使用Eyefinity设置从一台PC运行PowerWall(6x3显示器)时遇到过类似的问题。简短的版本是,正如您所发现的那样,在多张卡片上运行Processing草图存在很多问题。

我们倾向于通过使用不同的方法解决它 - 应用程序的多个副本,每个副本只跨越一个监视器,呈现子部分并自我同步。这是人们在从多台机器驱动大型显示器时倾向于使用的方法,但它似乎也避开了这些帧率问题。

For Processing,有几个图书馆支持这一点:Dan Shiffman的Most Pixels Ever和来自德克萨斯高级计算中心的Massive Pixel Environment。他们都有合理的例子可以帮助你完成设置阶段。

但是,如果我们尝试使用OpenGL渲染时,我们一直遇到来自JOGL的崩溃 - 这是大约6个月前,所以也许现在已经修复了。你的绘制循环看起来好像使用Java2D,所以希望这对你来说不是问题。