📄 main.cpp
字号:
#include <irrlicht.h>
#include "fountain.h"
using namespace irr;
using namespace irr::core;
using namespace irr::scene;
using namespace irr::video;
#include <fmod/fmod.h>
FSOUND_STREAM* stream;
float *spectrum;
int main(){
// 创建一个基于DirectX 9.0的驱动
IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D9,
// 底层驱动:DirectX 9.0
core::dimension2d<s32>(800, 600),
// 窗口大小
32, // 全屏时的色深,窗口模式下忽略
false, // 是否是全屏模式
false // 是否使用模板缓冲(stencil buffer)
);
// 如果创建失败,返回
if (device == NULL)
return 1;
// 设置标题
device->setWindowCaption(L"Irrlicht Fountain Demo");
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IAnimatedMesh* mesh = NULL;
ISceneNode* node = 0;
//------------------------------------------------------------------------------
// 水面,这里利用了Irrlicht的特效之一:水面特效
// 增加一个山面网(Hill Plane Mesh)
// 一个山面网由一些块(tile)组成
mesh = smgr->addHillPlaneMesh(
"myHill", // 山面网的名称
dimension2d<f32>(20,20), // 块的大小20x20
dimension2d<u32>(50,50), // 块的数量40x40
NULL, // 材质
0, // 山的高度
dimension2d<f32>(0,0), // 山丘的数量
dimension2d<f32>(10.0f,10.0f)); // 纹理重复次数
node = smgr->addWaterSurfaceSceneNode(
mesh->getMesh(0),
3.0f, // 水波的高度
300.0f, // 水波的速度
30.0f); // 水波的长度
node->setPosition(vector3df(0,7,0));
//水底的石头
node->setMaterialTexture(0, driver->getTexture("media/stones.jpg"));
// 水面
node->setMaterialTexture(1, driver->getTexture("media/water.jpg"));
// 添加反射效果
node->setMaterialType(video::EMT_REFLECTION_2_LAYER);
//------------------------------------------------------------------------------
// 光照
node = smgr->addLightSceneNode(0, vector3df(0,150,0),
SColorf(1.0f, 0.6f, 0.7f, 1.0f), 600.0f);
ISceneNodeAnimator* anim = 0;
anim = smgr->createFlyCircleAnimator (vector3df(0,150,0),250.0f);
node->addAnimator(anim);
anim->drop();
node = smgr->addBillboardSceneNode(node, core::dimension2d<f32>(50, 50));
node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
node->setMaterialTexture(0, driver->getTexture("media/fire.bmp"));
//------------------------------------------------------------------------------
// 粒子系统(喷泉的核心)
FountainSystem fountain_system(driver,smgr);
device->setEventReceiver(&fountain_system);
//------------------------------------------------------------------------------
// 设置第一人称观察点
ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS();
camera->setPosition(vector3df(-50,50,-150));
// 隐藏鼠标
device->getCursorControl()->setVisible(false);
//------------------------------------------------------------------------------
// 初始化fmod
FSOUND_Init (44100, 32, 0);
stream=FSOUND_Stream_Open("fountain.mp3",0, 0, 0);
FSOUND_SetBufferSize(1024*1024);
FSOUND_Stream_SetBufferSize(1000);
FSOUND_Stream_Play(0,stream);
FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), true);
spectrum = FSOUND_DSP_GetSpectrum();
//------------------------------------------------------------------------------
// 主循环
while(device->run()){
if (device->isWindowActive()){
driver->beginScene(true, true, 0);
smgr->drawAll();
driver->endScene();
fountain_system.showSpectrum();
}
}
// 结束后,释放资源
device->drop();
FSOUND_Stream_Close(stream);
FSOUND_Close();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -