08
いまどきVJはプログラミングぐらいできないと、かなり恥ずかしいということでopenFrameworksに挑戦しました。なかなかいい感じにできました。

参考
openFrameworksでカメラの映像を3Dにする - aa develop

初心者にも一番おすすめなVJソフトのVDMX5
openFrameworks

まずプロジェクトは、Add onのofxSyphonを追加して生成します。
astellato/ofxSyphon: An OF add-on for using the Syphon framework

方法はこちらをご覧ください。
プロジェクトにアドオンを追加する方法 | openFrameworks

ofApp.h
#include "ofMain.h"
#include "ofxSyphon.h"

class ofApp : public ofBaseApp{

	public:
		void setup();
		void update();
		void draw();
    ofxSyphonServer output;

		void keyPressed(int key);
		void keyReleased(int key);
		void mouseMoved(int x, int y );
		void mouseDragged(int x, int y, int button);
		void mousePressed(int x, int y, int button);
		void mouseReleased(int x, int y, int button);
		void mouseEntered(int x, int y);
		void mouseExited(int x, int y);
		void windowResized(int w, int h);
		void dragEvent(ofDragInfo dragInfo);
		void gotMessage(ofMessage msg);

    ofEasyCam cam;
    ofVideoGrabber videoGrabber;
    ofMesh mesh;
    float xInterval, yInterval;
};

ofApp.cpp
#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofBackground(0);

    ofSetFrameRate(30);
    output.setName("Main");

    ofEnableDepthTest();
    ofEnableBlendMode(OF_BLENDMODE_ADD);
    cam.setDistance(400);

    videoGrabber.setup(80, 60);
    xInterval = float(ofGetWidth()) / videoGrabber.getWidth();
    yInterval = float(ofGetHeight()) / videoGrabber.getHeight();
    
    ofEnableDepthTest();
    ofEnableSmoothing();
    mesh.setMode(OF_PRIMITIVE_TRIANGLES);
    mesh.enableColors();
    mesh.enableIndices();
}

//--------------------------------------------------------------
void ofApp::update(){
    videoGrabber.update();
    
    if(videoGrabber.isFrameNew()){
        unsigned char * pixels = videoGrabber.getPixels().getData();

        mesh.clearVertices();
        mesh.clearColors();
        mesh.clearIndices();
        for(int h = 0; h < videoGrabber.getHeight(); h++){
            for(int w = 0; w < videoGrabber.getWidth(); w++){
                float r = (float)pixels[int(h * videoGrabber.getWidth() + w) * 3] / 256.0;
                float g = (float)pixels[int(h * videoGrabber.getWidth() + w) * 3 + 1] / 256.0;
                float b = (float)pixels[int(h * videoGrabber.getWidth() + w) * 3 + 2] / 256.0;
                ofFloatColor color = ofFloatColor(r, g, b);
                float z = ofMap(color.getBrightness(), 0, 1, 300, -300);
                mesh.addColor(color);
                //mesh.addVertex(ofVec3f(w * xInterval, h * yInterval, z));
                mesh.addVertex(ofVec3f((w - videoGrabber.getWidth()/2) * xInterval, (h - videoGrabber.getHeight()/2) * yInterval, z));
            }
        }
        for(int h = 0; h < videoGrabber.getHeight() - 1; h++){
            for(int w = 0; w < videoGrabber.getWidth() - 1; w++){
                mesh.addIndex(h * videoGrabber.getWidth() + w);
                mesh.addIndex(h * videoGrabber.getWidth() + w + 1);
                mesh.addIndex((h + 1) * videoGrabber.getWidth() + w + 1);
                mesh.addIndex(h * videoGrabber.getWidth() + w);
                mesh.addIndex((h + 1) * videoGrabber.getWidth() + w);
                mesh.addIndex((h + 1) * videoGrabber.getWidth() + w + 1);
            }
        }
    }
}

//--------------------------------------------------------------
void ofApp::draw(){
    cam.begin();
    ofScale(1, -1, 1);
    //mesh.draw();
    mesh.drawWireframe();
    cam.end();

    output.publishScreen();
}