将P3D对象放在默认渲染器中

时间:2016-04-07 05:51:46

标签: java opengl 3d processing renderer

我使用处理3中的默认渲染器创建了一个音频可视化器,现在我想在音频可视化器(在默认渲染器中创建)中实现一个独立的旋转3D立方体(使用P3D)。以下是3D立方体的代码:

import processing.opengl.*;

float y = 0.1;
float x = 0.1;
float z = 0.1;

void setup()
{
    size(800,600,P3D);
    smooth();
}

void draw()
{
    translate(400,300,0);
    rotateX(x);
    rotateY(y);
    rotateZ(z);
    background(255);
    fill(255,228,225);
    box(200);
    x += random(.1);
    y += random(.1);
    z += random(.1);
}

以下是可视化工具中与3D立方体相关的代码段:

void setup()
{
  size(800, 600);
  //fullScreen(2);
  minim = new Minim(this);
  player = minim.loadFile("/Users/samuel/Desktop/GT.mp3");
  meta = player.getMetaData();
  beat = new BeatDetect();
  player.loop();
  fft = new FFT(player.bufferSize(), player.sampleRate());
  fft.logAverages(60, 7);
  noStroke();
  w = width/fft.avgSize();
  player.play();
  background(0);
  smooth();
}

最终,我只是好奇我是否可以在不将可视化器的大小()更改为P3D的情况下集成3D对象。

1 个答案:

答案 0 :(得分:0)

您可以使用 createGraphics() 功能创建渲染器,并且可以将P3D传递到该渲染器以允许以3D形式绘制。

但是,如果草图使用默认渲染器,则无法执行此操作。您必须在主渲染器中使用P2DP3D才能在任何P3D渲染器中使用createGraphics()。来自the reference

  

重要的是要考虑与createGraphics()一起使用的渲染器与size()中指定的主渲染器的关系。例如,当其中一个定义为size()时,只能使用带有createGraphics()的P2D或P3D。与Processing 1.0不同,P2D和P3D使用OpenGL进行绘图,使用OpenGL渲染器时,主绘图表面必须基于OpenGL。如果P2D或P3D用作size()中的渲染器,则任何选项都可以与createGraphics()一起使用。如果在size()中使用默认渲染器,则只能将默认或PDF用于createGraphics()。

这是一个使用P2D渲染器作为主渲染器并使用P3D作为子渲染器的小例子:

PGraphics pg;

void setup() {
  size(200, 200, P2D);
  pg = createGraphics(100, 100, P3D);
}

void draw() {
  pg.beginDraw();
  pg.background(0);
  pg.noStroke();
  pg.translate(pg.width*0.5, pg.height*0.5);
  pg.lights();
  pg.sphere(25);
  pg.endDraw();

  background(0, 0, 255);
  image(pg, 50, 50); 
}