当前位置: 首页 > 知识库问答 >
问题:

要使用哪个处理库来创建同时运行的渲染

常茂
2023-03-14

我最近在处理(http://processing.org/)我希望知道是否有一个库可以帮助我创建两个不同的窗口来渲染同一场景的两个视图。还有什么方法可以直接从一个切换到另一个。

共有2个答案

司马弘益
2023-03-14

下面是一个简单的例子:

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);        
    }

}

有三件事要看:

  1. 生成单独的视图——请注意,草图大小实际上是原来的两倍,我使用push/pop调用隔离变换并渲染相同的数据。也可以随意使用camera()perspective()功能
  2. 生成帧。注意,处理使用java语言。awt。使用Frame调整大小的框架。setSize(),我扩展了一个JPanel,以便可以在图形对象中绘制
  3. 更新图像:我正在使用get(x,y,width,height)在绘制/渲染循环结束时获取渲染场景的快照。PImage提供了一个getNative()方法,该方法返回一个BuffereImage表示。这可以被绘制成java。awt。图形实例。我告诉自定义JPanel组件重新绘制以更新像素

这种方法有点奇怪,但是您使用的是具有相同变量的相同草图,而不是两个PApplet实例。

陆翔飞
2023-03-14

我不知道这样的库是否存在的处理,但你可以很容易地创建两个窗口使用以下代码基于最近的处理论坛线程

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);
}
//...//
 类似资料:
  • 我们正在使用crud操作构建一个laravel应用程序,根据背包文档,我了解了如何使用命令php artisan make:migration:schema create_tags_table--model=0--schema=“name:string:unique,slug:string:unique”php artisan migrate创建一个模块 php artisan backpack:

  • 问题内容: 目前,我对新的react hooks API 的用例以及您可能会做的事情感到非常惊讶。 实验时出现的一个问题是,总是创建一个新的处理函数仅在使用时就扔掉是多么昂贵。 考虑以下示例: 尽管我将处理程序包装为,以避免每次渲染新处理程序时都会传递新的处理程序,但仍然必须创建内联箭头函数,而在大多数情况下都必须将其丢弃。 如果我只渲染几个组件,可能没什么大不了的。但是,如果我这样做数千次,对性

  • 我正在使用Python和tkinter创建一个游戏,当我试图添加一些音乐时,制作音乐的函数停止了脚本的其余部分(还有窗口)。所以我需要创建一个新的线程来播放音频并保持窗口工作... 我尝试了一些错误、不运行或停止窗口的事情,目前我有: 重要的细节:playSound函数什么也不返回,所以什么都不需要等待它。我也不太懂用Python编程,我更喜欢用Luau。

  • 为spring boot应用程序集成EhCache3缓存提供程序。我需要决定使用哪个缓存管理器。理想情况下,我希望在我的缓存方法上使用Springs缓存注释,例如@Cacheable,而不是jsr(@CacheResult),但对于cachemanager/cache库,我无法决定以下内容 我决定使用ehcache3提供程序进行缓存库注释: 对哪种实施方式有何建议?也许我不清楚上面的实现有什么不同

  • 我有数据集,我需要调整通货膨胀的多个变量。它看起来像这样。 我需要把这些都放在一个恒定的格式中(比如2020美元)。我可以用< code>priceR包中的< code > adjust _ for _ inflation 函数很容易地做到这一点。然而,有很多价格变量,所以我想自动创建它们。我一直在尝试使用< code > cross ,但它不起作用。以下是我一直在尝试的。 据我所知,这应该是一个

  • 我正在尝试将一个向服务器发送消息的异步任务迁移到RxJava。该任务大致执行以下操作: 1) 创建将要发送的消息(保存到数据库) 2)向用户显示消息(状态为“发送”) 3)将消息发送到服务器(下面的代码段) 4)将消息标记为已发送或失败(保存到数据库) 5)更新UI 我创建了所需的Rx链,部分如下所示: 当我订阅上述内容时,我会得到一个一次性的。通常,我会将其添加到CompositeDisposa