• ogre RenderTexture alpha rtt透明续


    做完了之前的render to texture那人又说他要的不是 这个 rtt完全透明 要的是 rtt的背景是透明的 那个人头不透明 

    看了这个链接http://www.ogre3d.org/forums/viewtopic.php?f=2&t=15257

    问的google这个关键词ogre RenderTexture alpha

    测试成功其实本来已经很接近了 最后  renderMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT); 这个方法的最后一个参数用的不对  本来就不是很明白是什么意思 在挨个试验 不过这种在代码中 设置纹理 可以参考material的script 这里ogre scene_blend 透明 有具体说明 是从参考手册和网上搜来的

    下面 说具体实现 做出rtt的效果 参见 中级教程rtt

    可以 画出rectangle 放rentangle里也可以放 overlay或者别的什么里面

    一,生成的rtt的格式是 A8R8G8B8就是说要带alpha通道

    (很早就知道这一点了 但是一直不知道是怎么写入通道的 其实就是二)

    二。设置此rtt的viewport的backcolor(0,0,0,0)最后一个就是alpha,想要什么程度的透明就是从这里设置的

    (其实本身我做了二这步 但是不知道这个setcoulour就是写入alpha通道,回头想的时候总是很好理解的 alpha在colourvalue里面)

    三,setSceneBlend的模式(Ogre::SBT_TRANSPARENT_ALPHA) 这个的意思是按照alpha遮罩去最终颜色 这里我再重申下 混合 透明是material里sceneblend这个属性控制的 里面有很多选项 基本的是 最终混合结果=要加入的纹理*参数1+已存在的纹理*参数2  而scenenblend的那四种模式都是 这个基本的方法对出来的

    四。setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT)

    之前我就是这步做错了 第三个参数里用了手动模式 在后面的4.5个参数里 配置 导致之前的alpha就失效了。

    这样就差不多了 以防有遗漏  上代码

    Ogre::TexturePtr rtt_texture = Ogre::TextureManager::getSingleton().createManual("RttTex", 
    		Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 
    		Ogre::TEX_TYPE_2D, mWindow->getWidth(), mWindow->getHeight(), 0, Ogre::PF_A8R8G8B8, Ogre::TU_RENDERTARGET);
    
    	Ogre::RenderTexture *renderTexture = rtt_texture->getBuffer()->getRenderTarget();
    
    	renderTexture->addViewport(mCamera);
    	renderTexture->getViewport(0)->setClearEveryFrame(true);
    	renderTexture->getViewport(0)->setBackgroundColour(Ogre::ColourValue(0.5f,0.5f,0.5f,0.5f));
    	renderTexture->getViewport(0)->setOverlaysEnabled(false);
    
    
    	renderTexture->update();
    	renderTexture->writeContentsToFile("start.png");
    
    	mMiniScreen = new Ogre::Rectangle2D(true);
    	mMiniScreen->setCorners(0.5f, -0.5f, 1.0f, -1.0f);
    	mMiniScreen->setBoundingBox(Ogre::AxisAlignedBox(-100000.0f * Ogre::Vector3::UNIT_SCALE, 100000.0f * Ogre::Vector3::UNIT_SCALE));
    
    
    	Ogre::SceneNode* miniScreenNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("MiniScreenNode");
    
    	miniScreenNode->attachObject(mMiniScreen);
    
    	Ogre::MaterialPtr renderMaterial = Ogre::MaterialManager::getSingleton().create("RttMat", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
    	Ogre::Technique* matTechnique = renderMaterial->createTechnique();
    	matTechnique->createPass();
    	renderMaterial->getTechnique(0)->getPass(0)->setLightingEnabled(false);
    	renderMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex");
    
    	renderMaterial->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA);//SBT_TRANSPARENT_COLOUR
    
    	//material->getTechnique(0)->getPass(0)->setTransparentSortingEnabled(true);
    
    	renderMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT); // 0.8为透明度
    	
    	mMiniScreen->setMaterial("RttMat");
    	renderTexture->addListener(this);
    
    
    //overlay fullfill
    
    
    Ogre::TextureManager::getSingleton().load("droplet.png",Ogre::ResourceGroupManager :: DEFAULT_RESOURCE_GROUP_NAME);
    	Ogre::OverlayElement *mpicture=NULL;
    	mpicture = Ogre::OverlayManager::getSingleton().createOverlayElement("Panel","Overlay/Picture");
    	mpicture->setParameter("metrics_mode","pixels");
    	mpicture->setParameter("left","5");
    	mpicture->setParameter("top","50");
    	mpicture->setParameter("width","400");
    	mpicture->setParameter("height","250");
    //	mpicture->setMaterialName("picture/Picture");
    		mpicture->setMaterialName("RttMat");
    	Ogre::Overlay *mOverlay = Ogre::OverlayManager::getSingleton().create("Overlay");
    	mOverlay->add2D((Ogre::OverlayContainer*)mpicture);
    	mOverlay->show();
    

    里面有些没用的测试代码 挑着看

    上图

  • 相关阅读:
    51-maven私有库神坑之:“Downloading: http://repo.maven.apache.org/maven2/”
    50-maven 仓库配置
    49-2017年第八届蓝桥杯国赛试题及详解(Java本科B组)
    21-matlab 迷宫题
    20-matlab全排列-函数调用
    52-python 画图二维
    51-python3 pandas读写excel
    48-设置tomcat虚拟路径的两种方法(Eclipse、tomcat、IDEA)
    19-matlab知识点复习二
    【剑指offer】二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/minggoddess/p/1910270.html
Copyright © 2020-2023  润新知