子节点的位置与父节点位置的关系

来源:互联网 发布:淘宝平台费用是多少 编辑:程序博客网 时间:2024/06/05 01:14
子节点的位置与父节点位置的关系
当父节点旋转时,子节点旋转,父节点缩放时,子节点缩放。其实里面的计算原理很简单,就是父节点矩阵乘以子节点矩阵得到最终矩阵。
相关代码如下:
Mat4 Node::getNodeToParentTransform(){updateMatrix();return _model;}Mat4 Node::transform(const Mat4& parentTransform){Mat4 ret = this->getNodeToParentTransform();ret  = parentTransform * ret;return ret;}

void Engine::drawScene(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//生成渲染指令if(_SceneManager.size() > 0){Scene * scene =  _SceneManager.back();scene->visit(Mat4(1.f));}//优化渲染队列Renderer::getInstance()->visit();//渲染到屏幕Renderer::getInstance()->renderBatch();if(_glView)_glView->swapBuffers();}

void Node::visit(const Mat4& parentMat4){int i = 0;if(!_children.empty()){sortAllChildren();// draw children zOrder < 0for(i = 0 ; i < _children.size(); i++ ){auto node = _children.at(i);if ( node && node->getZOrder() < 0 )node->visit(this->transform(parentMat4));elsebreak;}// self drawthis->render(parentMat4);for(auto it=_children.cbegin()+i; it != _children.cend(); ++it)(*it)->visit(this->transform(parentMat4));}else{this->render(parentMat4);}}

void Sprite::render(const Mat4& parentMat4){//updateMatrix();updateColor();_quadCommand.init(&_quad,_textureID,1,_blendFunc,this->transform(parentMat4));Renderer::getInstance()->addQuadCommand(&_quadCommand);}


0 0
原创粉丝点击