我最近正在处理(http://processing.org/),并希望找出是否有一个库可以帮助我创建两个不同的窗口,这两个窗口渲染同一场景的两个视图。还有任何方法可以直接从一个切换到另一个。
答案 0 :(得分:1)
我不知道处理中是否存在此类库,但您可以使用基于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);
}
//...//
答案 1 :(得分:1)
这是一个快速而又狡猾的例子:
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);
}
}
有三件事要看:
camera()
和perspective()
功能。 frame.setSize()
调整了大小,并扩展了一个JPanel,以便我可以绘制到Graphics对象中。getNative()
方法。这可以绘制到java.awt.Graphics实例中。我告诉自定义JPanel组件重绘以更新像素。这种方法有点苛刻,但你使用相同的草图而不是两个PApplet实例。