OGRE 投影贴图
来源:互联网 发布:时尚 知乎 编辑:程序博客网 时间:2024/05/17 01:42
投影贴图
声明:本系列手札是对中级教程的摘要,本节已经是中级教程的第六节了,详细的原材料,请到OGRE3D开放资源地带下载
开始前请将这两幅(右边的也是一幅图啊)图放到media/materials/textures目录下。
照例的框架程序
#include "ExampleApplication.h"
// A FrameListener that gets passed our projector node and decal frustum so they can be animated
class ProjectiveDecalListener : public ExampleFrameListener
{
public:
ProjectiveDecalListener(RenderWindow* win, Camera* cam, SceneNode *proj, Frustum *decal)
: ExampleFrameListener(win, cam), mProjectorNode(proj), mDecalFrustum(decal), mAnim(0)
{
}
bool frameStarted(const FrameEvent& evt)
{
return ExampleFrameListener::frameStarted(evt);
}
protected:
SceneNode *mProjectorNode;
Frustum *mDecalFrustum;
float mAnim;
};
class ProjectiveDecalApplication : public ExampleApplication
{
protected:
SceneNode *mProjectorNode;
Frustum *mDecalFrustum;
Frustum *mFilterFrustum;
void createScene()
{
// Set ambient light
mSceneMgr->setAmbientLight(ColourValue(0.2, 0.2, 0.2));
// Create a light
Light* l = mSceneMgr->createLight("MainLight");
l->setPosition(20,80,50);
// Position the camera
mCamera->setPosition(60, 200, 70);
mCamera->lookAt(0,0,0);
// Make 6 ogre heads (named head0, head1, etc.) arranged in a circle
Entity *ent;
for (int i = 0; i < 6; i++)