Ir para o conteúdo

Guia Rápido

Crie o Sketch

import com.victorvalentim.zividomelive.*;
import com.victorvalentim.zividomelive.manager.OutputManager;
import processing.opengl.PGraphicsOpenGL;
// Processing usa estes imports para montar dependências contributed-library.
import controlP5.*;
import codeanticode.syphon.*;
import spout.*;

zividomelive ziviDome;

void settings() {
  size(1280, 720, P3D);
  pixelDensity(1);
}

void setup() {
  ziviDome = new zividomelive(this);
  ziviDome.setTargetFrameRate(60); // Configuração opcional de startup.
  ziviDome.setup();
  ziviDome.setScene(new MainScene());
}

void draw() {
  // ziviDomeLive renderiza automaticamente pelo hook draw do Processing.
}

Chame setup() uma vez após a construção. Não chame ziviDome.draw() no sketch: o construtor já registrou os hooks Processing da biblioteca. Os imports de ControlP5, Syphon e Spout são necessários nos exemplos contributed-library para que o Processing monte o classpath de runtime; somente o backend local válido para a plataforma é usado.

Implemente uma Cena

class MainScene implements Scene {
  float angle;

  public void setupScene() {
    angle = 0;
  }

  public void update() {
    angle += 0.01f;
  }

  public void sceneRender(PGraphicsOpenGL pg) {
    pg.background(8, 12, 24);
    pg.lights();
    pg.rotateY(angle);
    pg.box(180);
    // A biblioteca controla beginDraw() e endDraw().
  }

  public String getName() {
    return "Main";
  }
}

sceneRender() é invocado para cada target necessário no frame. Mantenha alterações de estado em update() para que a animação avance uma vez por frame, não uma vez por face do cubemap.

Selecione um RenderMode

FULL é o padrão. Um sketch que nunca chama setRenderMode() mantém o comportamento de roteamento da 1.4.

ziviDome.setRenderMode(RenderMode.FULL);
ziviDome.setRenderMode(RenderMode.STANDARD);
ziviDome.setRenderMode(RenderMode.DOMEMASTER);
ziviDome.setRenderMode(RenderMode.EQUIRECTANGULAR);
ziviDome.setRenderMode(RenderMode.SKYBOX);

Use setCurrentView() para a rota de preview no modo FULL:

ziviDome.setCurrentView(zividomelive.ViewType.FISHEYE_DOMEMASTER);

Modos dedicados preservam essa seleção configurada, mas forçam temporariamente sua própria representação efetiva. Consulte Modos de Renderização e o Painel de Controle para a matriz completa de routing.

Receba Eventos

A biblioteca registra hooks de teclado e mouse do Processing e encaminha cada evento uma vez para a cena ativa. O listener ControlP5 interno encaminha eventos do painel pelo mesmo contrato.

public void keyEvent(processing.event.KeyEvent event) {
  if (event.getAction() == processing.event.KeyEvent.PRESS) {
    println(event.getKey());
  }
}

public void mouseEvent(processing.event.MouseEvent event) {
  // Trate a entrada da cena.
}

public void controlEvent(controlP5.ControlEvent event) {
  // Trate eventos relevantes do painel interno.
}

Não encaminhe esses eventos novamente pelo sketch principal.

Adicione Outras Cenas

SceneManager scenes = new SceneManager();
scenes.registerScene(new IntroScene());
scenes.registerScene(new MainScene());
ziviDome.setSceneManager(scenes);

O primeiro registro ativa a cena. As setas Esquerda e Direita alternam cenas pelos atalhos globais da biblioteca.

Roteie um Output

Outputs começam desabilitados:

OutputManager outputs = ziviDome.getOutputManager();
outputs.setNdiView(zividomelive.ViewType.EQUIRECTANGULAR);
outputs.toggleOutput("ndi");

Consulte estado e diagnóstico sem confundir disponibilidade com demanda de renderização:

println(outputs.getOutputState(OutputManager.OutputType.NDI));
println(outputs.getOutputFailureReason(OutputManager.OutputType.NDI));

A interoperabilidade nativa ainda exige qualificação de hardware por plataforma.

Continue em Gerenciamento de Cenas, Calibração Esférica e Integração Externa.