Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2016-06-30 10:43:15 Besoin d'aide OfEasyCam avec une kinect

autist
nouveau membre
Date d'inscription: 2016-06-30
Messages: 1

Besoin d'aide OfEasyCam avec une kinect



Bonjour à tous,

Je me présente je suis technicien dans une école d'art, je ne connais pas vraiment la programmation ( un peu de max msp et pure data ) mais je me suis mis en tête de faire un programme avec une kinect, une sorte de scanner 3D uniquement pour le visuel et me voila sur ce forum pour avoir un coup de main de pro car là je nage complètement.

Voici mon problème, j'arrive à avoir un image en maillage de mon sujet mais ma camera virtuel (OfEasyCam) refuse de tourner autour de mon sujet, elle tourne sur elle même comme si le sujet n'existé pas ! Quand je regarde cet exemple : https://www.youtube.com/watch?v=xndF-nlPBTE      on voit bien que la camera virtuel tourne autour de son sujet... Et dans la bibliothèque d 'openFrameworks on trouve un exemple d'utilisation de la kinect dans les addons et là la camera fonction bien et tourne autour de son sujet.

Encore une fois je n'y connais pas grand chose, je fais un peu du lego en récupérant des codes à droit et à gauche pour construire mon programme.

je poste mon code cpp

#include "ofApp.h"
#include "ofMesh.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofBackground(255);
   
    kinect.init();
    kinect.open();
   
    // 0-300の部分だけ深度取る ここ割と細かく設定できると精度上がる気がした
    //kinect.setDepthClipping(0,3000);
   
    // これでColorの通常カメラと深度カメラのズレ修正できた
    kinect.setRegistration(true);
   
   
    // Kinect 初期の首角度
    kinect.setCameraTiltAngle(-10);
       Cam.setDistance(160);
    //Cam.setTarget(model.getPosition());
    //Cam.lookAt(model.getPosition(), ofVec3f(0,-1,0));
   
       
 
   
   
}

   
//--------------------------------------------------------------
void ofApp::update(){
    //// update ////
   
    kinect.update();
 
    //clear
    mesh.clear();
    mesh2.clear();
    points.clear();
    colors.clear();
    indexs.clear();
   
    //Nombre de polygones du modele, 1 etant le superieur
    int step = 1;//int(5 + int(scaledVol*15));
    int total = 0;
    for (int j = 0; j < kinect.height; j+=step)
    {
        vector <ofVec3f> temppoints;
        vector  <ofColor> tempcolors;
        points.push_back(temppoints);
        colors.push_back(tempcolors);
       
        for (int i = 0; i < kinect.width; i+=step)
        {
            //distance de profondeur de champs
            float distance = kinect.getDistanceAt(i, j);
            if(distance>1 && distance<1000)
            {
                ofVec3f tempPoint;
                ofColor tempColor;
               
                tempPoint = ofVec3f((i-kinect.width/2.)*zoom, (-j+kinect.height/2.)*zoom, distance*-2.0 );
                tempColor = ofColor(kinect.getColorAt(i,j));
               
                points[j/step].push_back(tempPoint);
                colors[j/step].push_back(tempColor);
               
                total++;
            }else{
                ofVec3f tempPoint2;
                ofColor tempColor2;
                tempPoint2 = ofVec3f(i,j,0);    //範囲外には深度0
                tempColor2 = ofColor(0);
                points[j/step].push_back(tempPoint2);
                colors[j/step].push_back(tempColor2);
            }
        }
    }
    // Pour créer des artefacts, 0 etant sans bugs
    int ind = 0;
    for (int m = 0; m < kinect.height; m+=step)
    {
        vector <int> tempindexs;
        indexs.push_back(tempindexs);
       
        for (int n = 0; n < kinect.width; n+=step)
        {
            if(points[m/step][n/step].z != 0){
                //          cout << points[m][n] << endl;
                mesh.addColor(colors[m/step][n/step]);
                mesh.addVertex(points[m/step][n/step]);

                mesh2.addColor(ofColor(0,0,0));
                mesh2.addVertex(points[m/step][n/step]);
               
                indexs[m/step].push_back(ind);
                ind++;
            }else{
                indexs[m/step].push_back(-1);
            }
        }
    }
    // meshにTriangle追加
    int W = int(kinect.width/step);
    for (int b = 0; b < kinect.height-step; b+=step){
        for (int a = 0; a < kinect.width-1; a+=step)
        {
            if( (indexs[int(b/step)][int(a/step)]!=-1 && indexs[int(b/step)][int(a/step+1)]!=-1) && (indexs[int(b/step+1)][int(a/step+1)]!=-1 && indexs[int(b/step+1)][int(a/step)]!=-1) ){
               
                 //mesh.addTriangle(indexs[int(b/step)][int(a/step)],indexs[int(b/step)][int(a/step+1)],indexs[int(b/step+1)][int(a/step+1)]);
                 mesh.addTriangle(indexs[int(b/step)][int(a/step)],indexs[int(b/step+1)][int(a/step+1)],indexs[int(b/step+1)][int(a/step)]);
                mesh2.addTriangle(indexs[int(b/step)][int(a/step)],indexs[int(b/step)][int(a/step+1)],indexs[int(b/step+1)][int(a/step+1)]);
                mesh2.addTriangle(indexs[int(b/step)][int(a/step)],indexs[int(b/step+1)][int(a/step+1)],indexs[int(b/step+1)][int(a/step)]);
            }
        }
    }
   
}

//--------------------------------------------------------------
void ofApp::draw(){
    //// draw ////
   
   
    Cam.begin();
   

    // le maillage du modele, on peut utiliser ça: OF_PRIMITIVE_TRIANGLES, OF_PRIMITIVE_TRIANGLE_STRIP, OF_PRIMITIVE_TRIANGLE_FAN, OF_PRIMITIVE_LINES, OF_PRIMITIVE_LINE_STRIP, OF_PRIMITIVE_LINE_LOOP, OF_PRIMITIVE_POINTS
        //mesh.setMode(OF_PRIMITIVE_TRIANGLES);
        //glLineWidth(int(LINE_WEIGHT));
        //mesh.setMode(OF_PRIMITIVE_POINTS);
        //glLineWidth(int(LINE_WEIGHT));
        //mesh.draw();//Wireframe();
    mesh.setMode(OF_PRIMITIVE_LINE_STRIP);
    glLineWidth(int(LINE_WEIGHT));
    mesh.draw();//Wireframe();
    //mesh2.setMode(OF_PRIMITIVE_POINTS);
    //mesh2.drawWireframe();
   
    Cam.end();
   
 
   
}





//--------------------------------------------------------------
void ofApp::keyPressed(int key){
   
}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){
   
}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){
   
   
   
}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){
   
}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
   
}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){
   
}

//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y){
   
}

//--------------------------------------------------------------
void ofApp::mouseExited(int x, int y){
   
}

//--------------------------------------------------------------
void ofApp::windowResized(int w, int h){
   
}

//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg){
   
}

//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo){
   
}


Oui je sais c'est programmé avec les pieds smile
Merci pour un petit coup de main car là je bloque depuis pas mal de temps j'ai vu qu'il y avait un objet mais je ne comprends pas comment mon model s'appelle....
Bonne journée à vous

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024