Bonjour,
Je me suis lancé dans la conception d'un petit programme de réalité virtuelle sur processing :
-Le programme doit capturer un flux vidéo, y détecter des marqueurs et exécuter des instructions quand un marqueur est détecté ( dans mon cas charger un .obj et l'afficher )
Pour cela j'utilise les librairies OpenGL, NyARToolkit et OBJLoader
Cette partie est réalisé ( cf.le code plus bas) j'ai une fenêtre avec la vidéo en réalité augmenté.
-Deuxièmement je doit créer une interface graphique autour de ce programme, je souhaite donc diviser la fenêtre en deux parties : Une partie avec la vidéo et une autre partie avec diverses commandes et infos (boutons, textes, images etc.)
Pour cela j'ai simplement ajouté la librairie controlP5 pour ajouter des boutons.
Seulement j'ai un problème, je n'arrive pas à réduire la vidéo "augmenté" pour qu'elle n'occupe qu'une partie de la fenêtre...
Quelqu'un aurait-il une idée de comment résoudre ce problème ? Car si je ne peut pas réduire la vidéo dans un cadre et qu'elle occupe toute la fenêtre je vais avoir du mal à réaliser mon interface graphique
Mon code :
import java.io.*;
import processing.opengl.*;
import codeanticode.gsvideo.*;
import jp.nyatla.nyar4psg.*;
import saito.objloader.*;
//initialisation des variables :
GSCapture cam;
MultiMarker nya_1;
MultiMarker nya_2;
MultiMarker nya_3;
MultiMarker nya_4;
int fps = 30;
GSMovieMaker mm;
OBJModel model_1 ;
OBJModel model_2 ;
boolean bTexture = true;
boolean bStroke = false;
//initialisation d'une police de texte:
PFont p=createFont("FFScala", 32);
void setup() {
//Void devant la fonction définit le fait qu'elle ne renvoie pas de valeur.
//La fonction setup() sert à indiquer les options par défaut tel que la définition du cadre vidéo (sa taille), le lancement de la vidéo, de l'enregistrement vidéo et la détection des marqueurs.
//enregistrement :
size(1280,720,P3D); //definition de la taille de la fenetre d'affichage
colorMode(RGB,100); //définit le mode couleur interprété par processing, en RGB ici
println(MultiMarker.VERSION); //affiche dans la zone de texte l'évolution d'un type de variable
cam = new GSCapture(this,1280,720); //definit la taille de capture du flux vidéo
cam.start(); //lance l'aquisition du flux vidéo
//déclaration des marqueurs, on associe un marqueur à un pattern
nya_1 = new MultiMarker(this,1280,720,"camera_para.dat",NyAR4PsgConfig.CONFIG_DEFAULT);
nya_1.addARMarker("cube.patt",80);
nya_2 = new MultiMarker(this,1280,720,"camera_para.dat",NyAR4PsgConfig.CONFIG_DEFAULT);
nya_2.addARMarker("troisd.patt",80);
nya_3 = new MultiMarker(this,1280,720,"camera_para.dat",NyAR4PsgConfig.CONFIG_DEFAULT);
nya_3.addARMarker("patt.hiro",200);
nya_4 = new MultiMarker(this,1280,720,"camera_para.dat",NyAR4PsgConfig.CONFIG_DEFAULT);
nya_4.addARMarker("patt.kanji",200);
//setup obj :
frameRate(30);
model_1 = new OBJModel(this, "Pf5.obj","absolute", TRIANGLE_FAN);
model_1.enableDebug();
model_1.scale(4000);
model_1.translateToCenter();
model_2 = new OBJModel(this, "Cf4.obj","absolute", TRIANGLE_FAN);
model_2.enableDebug();
model_2.scale(4000);
model_2.translateToCenter();
stroke(255);
noStroke();
}
void draw() {
//initialisation des marqueurs à détecter
cam.read();
background(0);
PImage cSmall= cam.get();
nya_1.detect(cSmall);
nya_2.detect(cSmall);
nya_3.detect(cSmall);
nya_4.detect(cSmall);
nya_1.drawBackground(cam);
nya_2.drawBackground(cam);
nya_3.drawBackground(cam);
nya_4.drawBackground(cam);
//marqueur1
if ((nya_1.isExistMarker(0))) { //Fonction if , si le marqueur 1 est présent on execute la suite
nya_1.beginTransform(0); //début des modifications virtuelles
lights();
pushMatrix();
translate(0,0,50);
//rotateX(5);
rotateX(4.7);
model_1.draw();
popMatrix();
nya_1.endTransform(); //fin des modifications virtuelles
}
//marqueur2
if ((nya_2.isExistMarker(0))) {
nya_2.beginTransform(0);
lights();
pushMatrix();
translate(0, 0, 20);
model_2.draw();
popMatrix();
nya_2.endTransform();
}
//marqueur3
// if ((nya_3.isExistMarker(0))) {
// nya_3.beginTransform(0);
// lights();
// pushMatrix();
// translate(0, 0, 20);
// model.draw();
// popMatrix();
// nya_3.endTransform();
// }
//marqueur4
if ((nya_4.isExistMarker(0))) {
nya_4.beginTransform(0);
fill(0,100,100);
rotate(0);
textFont(p);
text ("Hello World",-50,0);
nya_4.endTransform();
}
}
Merci d'avance à ceux qui auront pris le temps de me lire
Dernière modification par leoof60 (2016-05-02 22:05:43)
Hors ligne
Bonsoir,
Quand tu affiches une image, tu lui donnes ses coordonnées, mais tu peux aussi lui donner une largeur et une hauteur d'affichage :
https://processing.org/reference/image_.html
Hors ligne
Pages: 1