Blender Live Shapes (018; 06.09.2009; blender, processing)
Blender Live Shape 1.0 from MyInventions on Vimeo.
Koncepcja.

Uwagi praktyczne.
I co dalej?
Mam nadzieję, że wraz z nową wersją Blendera (2.5) pojawi się działające polecenie, które pozwoli dynamicznie odświeżać siatkę kolizji obiektu. W efekcie pozwoliło by to na zaistnienie fizycznych interakcji między obiektem typu BLS, a innymi obiektami dynamicznymi.
Pliki do pobrania:
Processing: BlenderLiveShape.pde
Kod źródłowy Processing:
import processing.serial.*;
import processing.video.*;
Serial myPort;
Capture webcam;
int liczbaPikseli;
color Kolor;
int A, R, G, B, Y, j=1;
String name;
int t, T;
void setup() {
size(200, 150);
println(Serial.list());
myPort = new Serial(this,"COM10", 9600);
webcam = new Capture(this, width, height, 10); //framerate:10
liczbaPikseli = webcam.width*webcam.height;
//webcam.settings();
}
void draw(){
if (webcam.available() == true){
webcam.read();
set(0, 0, webcam);
loadPixels();
for (int i=0; i < liczbaPikseli; i++){
Kolor = pixels[i];
R = (Kolor >> 16) & 0xFF;
G = (Kolor >> 8) & 0xFF;
B = Kolor & 0xFF;
Y=int(0.3*R+0.59*G+0.11*B);
A = 255 << 24;
R = Y << 16;
G = Y << 8;
B=Y;
pixels[i]=A|R|G|B;
}
updatePixels();
name=str(j)+".png";
saveFrame(name);
myPort.write(char(j));
j++;
if (j==6){
//T=millis()-t;
//println(5000.0/T); //print real frame rate
//t=millis();
j=1;
}
}
}
Blender python API:
import Blender
from Blender import Image
from Blender import Texture
from Blender import Material
from Blender import Object
from Blender import Window
from Blender import Modifier
from Blender import Scene
import serial
myPort = serial.Serial('COM11', 9600)
texture=Texture.Get('Textura')
texture.setType('Image')
scene=Scene.getCurrent()
plane=Object.Get('Plane')
modifier=plane.modifiers[0]
myPort.flushInput()
for i in range(1, 301):
y = ord(myPort.read(size=1))
name=str(y)+".png"
image=Image.Load(name)
texture.image=image
modifier[Modifier.Settings.TEXTURE] = texture
Window.EditMode(1)
Window.EditMode(0)
Window.Redraw()
Blender Game Engine python:
import Blender
from Blender import Image
from Blender import Texture
from Blender import Material
from Blender import Object
from Blender import Window
from Blender import Modifier
from Blender import Scene
import serial
myPort = serial.Serial('COM11', 9600)
texture=Texture.Get('Textura')
texture.setType('Image')
scene=Scene.getCurrent()
plane=Object.Get('Plane')
modifier=plane.modifiers[0]
y = ord(myPort.read(size=1))
name=str(y)+".png"
image=Image.Load(name)
texture.image=image
modifier[Modifier.Settings.TEXTURE] = texture
controller = GameLogic.getCurrentController()
obj = controller.owner
mesh = obj.meshes[0]
obj.replaceMesh(mesh)