摘要:水晶材質再探
現在要做一個水晶折射效果, 之前用了Compositor把全景當成背景來扭曲,
今天想要用網路上 Chromatic Aberration 的方式, 來做出有顏色散射的效果
首先
先挖出以前的程式
material Rz/DynamicCubeMap
{
technique
{
pass
{
vertex_program_ref Rz/RefractionVP
{
}
fragment_program_ref Rz/RefractionFP
{
}
texture_unit
{
// will be filled in at runtime
cubic_texture dyncubemap combinedUVW
//tex_address_mode clamp
//env_map cubic_reflection
}
}
}
}
看起來好像以前寫過, 但是忘記怎麼寫了... 要把cubic_texture塞一個Cubemap進去給它, 先去FORUM找一下我以前參考的範例
(以前要是有寫BLOG的習慣 就不會忘得這麼徹底了)
結果,找到我的Framework中還留著 CubeMap Camera的設定
// create the camera used to render to our cubemap
mCubeCamera = mSceneMgr->createCamera("CubeMapCamera");
mCubeCamera->setFOVy(Ogre::Degree(90));
mCubeCamera->setAspectRatio(1);
mCubeCamera->setFixedYawAxis(false);
mCubeCamera->setNearClipDistance(5);
// create our dynamic cube map texture
Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton().createManual("RzDynamicCubeMap",
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_CUBE_MAP, 1024, 1024, 0, Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET);
// assign our camera to all 6 render targets of the texture (1 for each direction)
for (unsigned int i = 0; i < 6; i++)
{
mTargets[i] = tex->getBuffer(i)->getRenderTarget();
mTargets[i]->addViewport(mCubeCamera)->setOverlaysEnabled(false);
mTargets[i]->addListener(this);
}//for
以及當Cubemap RenderTarget打開後, 會自動進入的 preRenderTargetUpdate
mCubeCamera->setOrientation(Ogre::Quaternion::IDENTITY);
if (evt.source == mTargets[0]) mCubeCamera->yaw(Ogre::Degree(-90));
else if (evt.source == mTargets[1]) mCubeCamera->yaw(Ogre::Degree(90));
else if (evt.source == mTargets[2]) mCubeCamera->pitch(Ogre::Degree(90));
else if (evt.source == mTargets[3]) mCubeCamera->pitch(Ogre::Degree(-90));
else if (evt.source == mTargets[5]) mCubeCamera->yaw(Ogre::Degree(180));
此時, 程式變得很慢, 因為多畫了6個RenderTarget
物體折射出黑色的背景, 但至少不用花太大力氣就把效果叫出來.
ISSUES:
1. 將背景變成和BG一樣的底色
2.CUBEMAP CAMERA的位置要放到OGRE中心而且, 它自己不能被畫在CUBEMAP上
3. 考慮不用真實CUBEMAP, 而是用已經做好的CUBEMAP
(又中略)


Issues:
1. 要有星芒
2.背景太平淡, 可否找到暖色系的
3.反面折射也要有
![]() |
|


