⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 一个功能简单的音乐喷泉
💻 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 + -