//------------------------------------------------------------------------------ void Background2D::renderQueueEnded( Ogre::uint8 queueGroupId, const Ogre::String& invocation, bool& repeatThisInvocation ) { if( cv_show_background2d.GetB() == false ) { return; } if( queueGroupId == Ogre::RENDER_QUEUE_MAIN ) { m_RenderSystem->_setWorldMatrix( Ogre::Matrix4::IDENTITY ); m_RenderSystem->_setProjectionMatrix( Ogre::Matrix4::IDENTITY ); Ogre::Viewport *viewport( CameraManager::getSingleton().getViewport() ); float width = viewport->getActualWidth(); float height = viewport->getActualHeight(); Ogre::Matrix4 view; view.makeTrans( Ogre::Vector3( m_PositionReal.x * 2 / width, -m_PositionReal.y * 2 / height, 0 ) ); m_RenderSystem->_setViewMatrix( view ); if( m_AlphaRenderOp.vertexData->vertexCount != 0 ) { m_SceneManager->_setPass( m_AlphaMaterial->getTechnique( 0 )->getPass( 0 ), true, false ); m_RenderSystem->_render( m_AlphaRenderOp ); } if( m_AddRenderOp.vertexData->vertexCount != 0 ) { m_SceneManager->_setPass( m_AddMaterial->getTechnique( 0 )->getPass( 0 ), true, false ); m_RenderSystem->_render( m_AddRenderOp ); } } }
//设置位置 (游戏世界坐标) VOID CEffectObject::SetPosition(const fVector3& vPos) { //坐标转换 fVector3 fvGfx; CRenderSystem::GetMe()->Axis_Trans(CRenderSystem::AX_GAME, vPos, CRenderSystem::AX_GFX, fvGfx); std::list< std::pair< Fairy::Effect*, Ogre::SceneNode* > >::iterator it; for(it=m_listEffectImpl.begin(); it!=m_listEffectImpl.end(); it++) { it->second->setPosition(Ogre::Vector3(fvGfx.x, fvGfx.y, fvGfx.z)); } #if 0 Ogre::Matrix4 mxPosition = Ogre::Matrix4::IDENTITY; mxPosition.makeTrans(fvGfx.x, fvGfx.y, fvGfx.z); Ogre::MatrixList vMatrix; vMatrix.push_back(mxPosition); std::list< Ogre::Effect* >::iterator it; for(it=m_listEffectImpl.begin(); it!=m_listEffectImpl.end(); it++) { (*it)->execute(0, vMatrix); } #endif }
// Called by Rocket when it wants to render application-compiled geometry. void RenderInterfaceOgre3D::RenderCompiledGeometry(Rocket::Core::CompiledGeometryHandle geometry, const Rocket::Core::Vector2f& translation) { Ogre::Matrix4 transform; transform.makeTrans(translation.x, translation.y, 0); render_system->_setWorldMatrix(transform); render_system = Ogre::Root::getSingleton().getRenderSystem(); RocketOgre3DCompiledGeometry* ogre3d_geometry = (RocketOgre3DCompiledGeometry*) geometry; if (ogre3d_geometry->texture != NULL) { render_system->_setTexture(0, true, ogre3d_geometry->texture->texture); // Ogre can change the blending modes when textures are disabled - so in case the last render had no texture, // we need to re-specify them. render_system->_setTextureBlendMode(0, colour_blend_mode); render_system->_setTextureBlendMode(0, alpha_blend_mode); } else render_system->_disableTextureUnit(0); render_system->_render(ogre3d_geometry->render_operation); }
void RocketInterface::RenderCompiledGeometry(Rocket::Core::CompiledGeometryHandle geometryHandle, const Rocket::Core::Vector2f& translation) { RocketOgreGeometry* geometry = reinterpret_cast<RocketOgreGeometry*>(geometryHandle); // Build world matrix Ogre::Matrix4 world; world.makeTrans(translation.x, translation.y, 0); // Draw UI element Ogre::Pass* pass; if (geometry->texture) { pass = mUIMaterial->getTechnique("Texture")->getPass(0); pass->getTextureUnitState(0)->setTexture(geometry->texture->texture); } else { pass = mUIMaterial->getTechnique("NoTexture")->getPass(0); } mSceneMgr->manualRender(&geometry->renderOp, pass, nullptr, world, Ogre::Matrix4::IDENTITY, mProjection); }