//---------------------------------------- void ofNode::setParent(ofNode& parent, bool bMaintainGlobalTransform) { if(bMaintainGlobalTransform) { ofMatrix4x4 postParentGlobalTransform = getGlobalTransformMatrix() * parent.getGlobalTransformMatrix().getInverse(); parent.addListener(*this); setTransformMatrix(postParentGlobalTransform); } else { parent.addListener(*this); } this->parent = &parent; }
void gradientWaves::addPointsToMesh(ofMesh *m, ofNode l, ofNode r, int i){ ofFloatColor col = ofColor::white; float mix = cos(i*3); ofFloatColor temp = ofColor::lightGreen; ofFloatColor temp2 = ofColor::darkMagenta; m->addVertex(l.getGlobalPosition()); m->addColor(col); m->addVertex(r.getGlobalPosition()); m->addColor(col); }
//---------------------------------------- void ofNode::setParent(ofNode& parent, bool bMaintainGlobalTransform) { if (this->parent) { // we need to make sure to clear before // re-assigning parenthood. clearParent(bMaintainGlobalTransform); } if(bMaintainGlobalTransform) { auto postParentGlobalTransform = glm::inverse(parent.getGlobalTransformMatrix()) * getGlobalTransformMatrix(); parent.addListener(*this); setTransformMatrix(postParentGlobalTransform); } else { parent.addListener(*this); } this->parent = &parent; }
//-------------------------------------------------------------- static void aiMatrix4x4ToOfMatrix4x4(const aiMatrix4x4& aim, ofNode& ofm){ float m[16] = { aim.a1,aim.a2,aim.a3,aim.a4, aim.b1,aim.b2,aim.b3,aim.b4, aim.c1,aim.c2,aim.c3,aim.c4, aim.d1,aim.d2,aim.d3,aim.d4 }; ofm.setTransformMatrix( m); }
//---------------------------------------- void ofNode::setParent(ofNode& parent, bool bMaintainGlobalTransform) { if (this->parent) { // we need to make sure to clear before // re-assigning parenthood. clearParent(bMaintainGlobalTransform); } if(bMaintainGlobalTransform) { auto postParentPosition = position - parent.getGlobalPosition(); auto postParentOrientation = orientation.get() * glm::inverse(parent.getGlobalOrientation()); auto postParentScale = scale / parent.getGlobalScale(); parent.addListener(*this); setOrientation(postParentOrientation); setPosition(postParentPosition); setScale(postParentScale); } else { parent.addListener(*this); } this->parent = &parent; }
void RibbonSegment::update(ofNode inFront) { //damply move towards the front; ofVec3f newPosition = node.getPosition() + (inFront.getPosition() - node.getPosition()) * .1; //almost there... node.setPosition( newPosition ); //stay on target node.lookAt(inFront, node.getUpDir()); }
void ofCairoRenderer::draw(const ofNode& node) const{ const_cast<ofCairoRenderer*>(this)->pushMatrix(); const_cast<ofCairoRenderer*>(this)->multMatrix(node.getGlobalTransformMatrix()); node.customDraw(this); const_cast<ofCairoRenderer*>(this)->popMatrix(); }
//---------------------------------------- void ofNode::orbitRad(float longitude, float latitude, float radius, ofNode& centerNode) { orbitRad(longitude, latitude, radius, centerNode.getGlobalPosition()); }
//---------------------------------------- void ofNode::lookAt(const ofNode& lookAtNode, const glm::vec3& upVector) { lookAt(lookAtNode.getGlobalPosition(), upVector); }
//---------------------------------------- void ofNode::lookAt(const ofNode& lookAtNode){ lookAt(lookAtNode.getGlobalPosition()); }
void ofNode::lookAt(ofNode& lookAtNode, const ofVec3f& upVector) { lookAt(lookAtNode.getGlobalPosition(), upVector); }
void ofxResetTransform(ofNode &node) { node.resetTransform(); node.setScale(1,1,1); }
void ofxRotate(ofNode &node, ofQuaternion q) { node.setOrientation(node.getOrientationQuat() * q); }