Quantcast
Channel: beginners - openFrameworks
Viewing all articles
Browse latest Browse all 4929

Drawing a collection of 3D models at the vertices of another 3D model

$
0
0

@eulphean wrote:

Hello all,

I’m trying to draw some 3D models that I’m loading with ofxAssimpModelLoader. I’m able to draw the first 3D model successfully as I followed the assimpLoader example in oF. However, I need to draw a collection of the second 3D model at each of the vertex of the first 3D model. Here’s my code.

#include "ofApp.h"

CoinObject::CoinObject() {
  model.loadModel("HighCoin.obj", true);
  model.setRotation(0, 0, 0, 0, 0);
  model.setScale(0.9, 0.9, 0.9);
}

//--------------------------------------------------------------
void ofApp::setup(){
  ofBackground(ofColor::black);
  ofSetVerticalSync(true);
  
  // Load the 1st 3D model.
  humanModel.loadModel("Breathing.dae", false);
  humanModel.setPosition(0, 0, 0);
  humanModel.setRotation(0, 180, 0, 0, 1);
  humanModel.setScale(1.5, 1.5, 1.5);
  humanModel.setLoopStateForAllAnimations(OF_LOOP_NORMAL);
  humanModel.setPausedForAllAnimations(false);
  humanModel.playAllAnimations();
  humanMesh = humanModel.getCurrentAnimatedMesh(0);
  
  topLight.setPosition(0, 500, 500);
  bottomLight.setPosition(0, -500, 500);
  
  ofEnableBlendMode(OF_BLENDMODE_ALPHA);
  
  // Create a collection of 2nd 3D model for each vertex of the mesh.
  auto vertexCount = humanMesh.getVertices().size();
  for (int i = 0; i < vertexCount; i++) {
    CoinObject  *coin = new CoinObject();
    coins.push_back(coin);
  }
}

//--------------------------------------------------------------
void ofApp::update(){
  humanModel.update();
  humanMesh = humanModel.getCurrentAnimatedMesh(0);
}

//--------------------------------------------------------------
void ofApp::draw(){
  ofEnableDepthTest();
    ofEnableLighting();
      topLight.enable();
      bottomLight.enable();
      ofPushMatrix();
        cam.begin();
          drawMeshVertices();
        cam.end();
      ofPopMatrix();
      bottomLight.disable();
      topLight.disable();
    ofDisableLighting;
  ofDisableDepthTest();
}

void ofApp::drawMeshVertices() {
  ofPushMatrix();
    ofFill();
    ofSetColor(ofColor::red);
    ofxAssimpMeshHelper & meshHelper = humanModel.getMeshHelper(0);
    ofMultMatrix(humanModel.getModelMatrix());
    ofMultMatrix(meshHelper.matrix);
    for (int i = 0; i < humanMesh.getVertices().size(); i++) {
      // None of the coins can be seen on the screen. 
      coins[i] -> model.drawFaces();
    }
  ofPopMatrix();
}

I need to call ofMultMatrix twice to draw the mesh for the 1st 3D model. I tried calling that for the 2nd model as well before the drawFaces call on the coin model, but nothing shows up on the screen. Any suggestion/advice? Thanks in advance :slight_smile:

Posts: 3

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 4929