//渲染
void Scene::render(Renderer* renderer)
{
auto director = Director::getInstance();
Camera* defaultCamera = nullptr;
const auto& transform = getNodeToParentTransform();
//遍历所有相机
for (const auto& camera : getCameras())
{
if (!camera->isVisible())
continue;
Camera::_visitingCamera = camera;
if (Camera::_visitingCamera->getCameraFlag() == CameraFlag::DEFAULT)
{
defaultCamera = Camera::_visitingCamera;
}
//这里有个疑惑,getViewProjectionMatrix这个函数明明获取的是
//试图投影矩阵即视图矩阵和投影矩阵的乘积,名字确实投影矩阵
// /**get view projection matrix*/
// const Mat4& getViewProjectionMatrix() const;
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
camera->apply();
//clear background with max depth
camera->clearBackground();
//visit the scene
//添加渲染命令
visit(renderer, transform, 0);
//真正的渲染
renderer->render();
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
}
Camera::_visitingCamera = nullptr;
experimental::FrameBuffer::applyDefaultFBO();
}
2、
渲染命令
void Node::visit(Renderer* renderer, const Mat4 &parentTransform, uint32_t parentFlags)
这里会获取模型变化,我的理解这里获取的是模型变化,并没有视图变换,名字为什么是modelView,我不是很理解。。。
if(flags & FLAGS_DIRTY_MASK)
_modelViewTransform = this->transform(parentTransform);
3、
void Sprite::draw(Renderer renderer, const Mat4 &transform, uint32_t flags)
_trianglesCommand.init(_globalZOrder, _texture->getName(), getGLProgramState(), _blendFunc, _polyInfo.triangles, transform, flags);
renderer->addCommand(&_trianglesCommand);
精灵的绘制命令
初始化方法:const Mat4& mv这里也是上面疑惑的地方
void TrianglesCommand::init(float globalOrder, GLuint textureID, GLProgramState glProgramState, BlendFunc blendType, const Triangles& triangles,const Mat4& mv, uint32_t flags)
疑问:cocos中的MVP矩阵如何计算的?