【发布时间】:2013-12-24 10:11:14
【问题描述】:
我最近正在处理 (http://processing.org/) 并希望找出是否有一个库可以帮助我创建两个不同的窗口,它们呈现同一场景的两个视图。还有没有办法直接从一个切换到另一个。
【问题讨论】:
标签: animation processing
我最近正在处理 (http://processing.org/) 并希望找出是否有一个库可以帮助我创建两个不同的窗口,它们呈现同一场景的两个视图。还有没有办法直接从一个切换到另一个。
【问题讨论】:
标签: animation processing
我不知道 Processing 是否存在这样的库,但是您可以使用以下基于 a recent Processing forum thread 的代码轻松创建两个窗口
import java.awt.Frame;
import java.awt.MouseInfo;
import java.awt.Point;
PFrame f;
secondApplet s;
void setup () {
size(500, 500);
PFrame f = new PFrame();
frame.setTitle("first window");
}
void draw () {
background(255);
s.background(0); // Second window background method
// .... //
}
public class PFrame extends Frame {
public PFrame() {
setBounds(0, 0, 500, 500);
s = new secondApplet();
setResizable(false);
add(s);
s.init();
show();
setTitle("second window");
}
}
public class secondApplet extends PApplet {
public void setup() {
size(500, 500);
}
public void draw() {
}
}
然后您可以在每个窗口中创建一个基于通用数据源和方法的绘图。 我不是专家,但我希望这可以帮助您开始您的项目。
请注意,G4P 等 GUI 库也支持创建多个窗口。
编辑:注释相关代码:
//...//
int x=50;
void draw () {
rect(width/2,0,x,x);
s.rect(s.width/2,0,x+10,x+10);
}
//...//
【讨论】:
这是一个快速而简单的例子:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.*;
ImagePanel view2;
PImage viewport2 = new PImage(400,400,RGB);
void setup(){
size(800,400,P3D);
noStroke();
frame.setSize(400,400);
frame.setTitle("view 1");
view2 = new ImagePanel((BufferedImage)viewport2.getNative());
JFrame v2 = new JFrame("view 2");
v2.setSize(400,400);
v2.add(view2);
v2.show();
}
void draw(){
background(0);
lights();
//view1
pushMatrix();
translate(200,200,0);
rotateX(45);
rotateY(map(mouseX,0,height,-PI,PI));
renderScene();
popMatrix();
//view2
pushMatrix();
translate(600,200,0);
rotateY(45);
rotateX(map(mouseX,0,height,-PI,PI));
renderScene();
popMatrix();
viewport2 = get(400,0,400,400);//fetch a screenshot from the invisible side (right side);
view2.setImage((BufferedImage)viewport2.getNative());
}
void renderScene(){
pushMatrix();
box(100);//and other elements here
popMatrix();
}
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel(BufferedImage img) {
setImage(img);
}
public void setImage(BufferedImage img){
image = img;
this.repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
}
有 3 件事要看:
camera() 和perspective() 函数。 frame.setSize() 调整了它的大小,并扩展了一个 JPanel,以便我可以在 Graphics 对象中进行绘制。getNative() 方法,该方法返回一个 BufferedImage 表示。这可以绘制到 java.awt.Graphics 实例中。我告诉自定义 JPanel 组件重新绘制以更新像素。这种方法有点老套,但您使用的是具有相同变量的相同草图,而不是两个 PApplet 实例。
【讨论】: