基础版在这里:颜色渐变的窗口
程序运行时依托于控制台窗口,主循环写起来比较轻松,关注渲染部分即可。
现在我们可以创建一个Windows应用程序,隐藏主窗口而只显示Irrlicht窗口
渲染部分的代码与基础版本无异,下面是完整的代码
#include <Windows.h>
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;
#pragma comment(lib,"irrlicht.lib")
HWND InitMainWindow(HINSTANCE hInst);
void IrrlichtColorFade(void);
INT APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//创建并初始化主窗口
HWND hWnd = InitMainWindow(hInstance);
ShowWindow(hWnd, SW_HIDE); //隐藏主窗口
SetCursor(NULL); //影藏光标
UpdateWindow(hWnd); //更新
// 颜色渐变窗口, 渲染循环
try
{
IrrlichtColorFade();
}
catch (PSTR except)
{
MessageBox(hWnd, except, TEXT("Exception"), MB_OK);
}
DestroyWindow(hWnd);
return 0;
}
HWND InitMainWindow(HINSTANCE hInst)
{
LPCSTR pszWin = "HidenMainWindow";
LPCSTR pszClx = "MainWindowClass";
WNDCLASS wndClx;
wndClx.hInstance = hInst;
//wndClx.hbrBackground = CreateSolidBrush(RGB(200, 250, 200));
//wndClx.hCursor = LoadCursor(hInstance, IDC_ARROW);
//wndClx.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wndClx.lpszClassName = pszClx;
//wndClx.lpszMenuName = NULL;
wndClx.lpfnWndProc = DefWindowProc; // 默认消息处理回调函数
//wndClx.style = CS_HREDRAW | CS_VREDRAW;
//wndClx.cbClsExtra = 0;
//wndClx.cbWndExtra = 0;
RegisterClass(&wndClx);
return CreateWindow(pszClx, pszWin, WS_POPUP, 0, 0, 100, 100, NULL, NULL, hInst, NULL);
}
void IrrlichtColorFade(void)
{
IrrlichtDevice* device = createDevice(EDT_DIRECT3D9, dimension2d<u32>(800, 600), 32U);
if (device == NULL) throw("Failed to create device!!");
device->setWindowCaption(L"Color Fade");
IVideoDriver* driver = device->getVideoDriver();
ITimer* timer = device->getTimer();
f32 bg_r = 255.0f;
f32 bg_g = 0.0f;
f32 bg_b = 255.0f;
bool fadeOut = true;
int lastFPS = -1;
u32 then = timer->getTime();
const f32 fadeRate = 0.05f;
while (device->run())
{
const u32 now = timer->getTime();
const f32 frameDeltaTime = (f32)(now - then);
then = now;
if (bg_r <= 0.0f) fadeOut = false;
else if (bg_r >= 255.0f) fadeOut = true;
if (fadeOut)
{
bg_r -= fadeRate * frameDeltaTime;
bg_g += fadeRate * frameDeltaTime;
bg_b -= fadeRate * frameDeltaTime;
}
else
{
bg_r += fadeRate * frameDeltaTime;
bg_g -= fadeRate * frameDeltaTime;
bg_b += fadeRate * frameDeltaTime;
}
driver->beginScene(true, true, SColor(255, (u32)bg_r, (u32)bg_g, (u32)bg_b));
driver->endScene();
}
device->drop();
}
从这份代码中的前半部分(InitMainWindow),你可以复习如何使用最少的代码(而不借助MFC)来创建一个
Windows用用程序,同时在主循环中加入自定义的功能(IrrlichtColorFade)
如果你对Windows应用程序的开发不甚了解,那么请关注IrrlichtColorFade部分就行了。
关于Irrlicht的执行流程也很简单:
1.CreateDevice 创建设备
2.SetContent 设置内容
3.Run (MainLoop) 渲染循环
4.Drop (Finished) 释放资源
主程序循环类似:
1.CreateWindow 创建窗口(并设置好消息响应回调)
2.SetContent 设置内容
3.ShowWindow 显示
4.Destroy (Finished) 销毁窗口
本例的运行结果(颜色动态变化过程)与上一例一样,只是没了背景窗口,运行中某时刻截图如下