Размещение объекта P3D в средстве визуализации по умолчанию

Я создал визуализатор звука, используя средство визуализации по умолчанию в Обработке 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();
}

В конце концов, мне просто любопытно, смогу ли я интегрировать 3D-объект, не меняя size() визуализатора на P3D.


person Samuel Kahessay    schedule 07.04.2016    source источник


Ответы (1)


Вы можете использовать функцию createGraphics() для создания средства визуализации и вы можете передать P3D в этот рендерер, чтобы разрешить рисование в 3D.

Однако вы не можете этого сделать, если ваш эскиз использует средство визуализации по умолчанию. Вы должны использовать либо P2D, либо P3D в своем основном рендерере, чтобы иметь возможность использовать P3D в любых createGraphics() рендерерах. Из ссылки:

Важно рассматривать средство визуализации, используемое с createGraphics(), по отношению к основному средству визуализации, указанному в size(). Например, с createGraphics() можно использовать P2D или P3D только тогда, когда один из них определен в size(). В отличие от Processing 1.0, P2D и P3D используют OpenGL для рисования, а при использовании средства визуализации OpenGL необходимо, чтобы основная поверхность рисования была основана на OpenGL. Если P2D или P3D используются в качестве рендерера в size(), то любой из параметров можно использовать с createGraphics(). Если в size() используется средство визуализации по умолчанию, то с createGraphics() можно использовать только средство по умолчанию или PDF.

Вот небольшой пример, в котором используется рендерер 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); 
}
person Kevin Workman    schedule 07.04.2016