我使用处理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对象。
答案 0 :(得分:0)
您可以使用 createGraphics()
功能创建渲染器,并且可以将P3D
传递到该渲染器以允许以3D形式绘制。
但是,如果草图使用默认渲染器,则无法执行此操作。您必须在主渲染器中使用P2D
或P3D
才能在任何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);
}