Hello everyone, I will need to see help I am starting on processing. I have already started the code I would like to have but I can’t get a correct result, I attach an image of the result I would like.
I would like to:
- at the top left it is the camera that works live
- -at the top right it is the image of my live camera which moves according to the movement with gray levels ranging from black at 0cm to white 2cm in order to create a variation that will be applied to the other two parts as well and so for this one it will be the camera in front of it
-then the one below at the bottom right will be a side view we will be able to see a thickness with the variations a bit like the interface of rhinoceros 3d
– at the bottom left it will be a 3D view we can turn around the object using the mouse the wheat is rather organic
The goal is for the cameras to be live in motion
code :
import processing.video.*;
Capture video;
int reliefScale = 5; // Facteur d'échelle pour le relief
float[][] relief; // Tableau pour stocker les hauteurs du relief
void setup() {
size(800, 600, P3D); // Taille de la fenêtre pour les vues multiples
// Liste les périphériques vidéo disponibles
String[] devices = Capture.list();
if (devices.length == 0) {
println("Aucun périphérique vidéo trouvé");
exit();
} else {
println("Périphériques vidéo disponibles:");
for (int i = 0; i < devices.length; i++) {
println(devices[i]);
}
// Initialise la capture avec le premier périphérique trouvé
video = new Capture(this, devices[0]);
video.start();
}
// Initialise le tableau pour le relief
relief = new float[width][height];
}
void draw() {
background(0); // Fond noir
// Affichage de la vue principale (en haut à gauche)
if (video != null && video.available()) {
video.read();
}
if (video != null) {
image(video, 0, 0, width/2, height/2); // Affiche la vidéo en haut à gauche
// Convertit l'image en niveaux de gris
video.loadPixels();
for (int y = 0; y < video.height; y++) {
for (int x = 0; x < video.width; x++) {
int loc = x + y * video.width;
float grayValue = brightness(video.pixels[loc]);
// Ajuste la hauteur du relief en fonction de la luminosité
relief[x][y] = map(grayValue, 0, 255, -100, 100);
}
}
}
// Affichage de la vue 2D (en haut à droite)
translate(width/2, 0); // Déplace le repère au centre-droite
for (int y = 0; y < height/2; y += reliefScale) {
beginShape(TRIANGLE_STRIP);
for (int x = 0; x < width/2; x += reliefScale) {
vertex(x, y, relief[x][y]);
vertex(x, y + reliefScale, relief[x][y + reliefScale]);
}
endShape();
}
// Affichage de la vue de côté (en bas à droite)
translate(0, height/2); // Déplace le repère en bas-droite
for (int x = 0; x < width/2; x += reliefScale) {
beginShape();
for (int y = 0; y < height/2; y += reliefScale) {
vertex(x, y, relief[x][y]);
}
endShape();
}
// Affichage de la vue 3D (en bas à gauche)
translate(-width/2, 0); // Déplace le repère au bas-gauche
rotateX(PI/3); // Inclinaison pour la vue 3D
rotateY(PI/4); // Rotation pour la vue 3D
for (int y = 0; y < height/2; y += reliefScale) {
beginShape(TRIANGLE_STRIP);
for (int x = 0; x < width/2; x += reliefScale) {
vertex(x, y, relief[x][y]);
vertex(x, y + reliefScale, relief[x][y + reliefScale]);
}
endShape();
}
}
void keyPressed() {
if (key == 's' || key == 'S') {
save("modele3D.png");
println("Modèle 3D enregistré sous modele3D.png");
}
}