Irrlicht例程02:颜色渐变的窗口(进阶版)

基础版在这里:颜色渐变的窗口

程序运行时依托于控制台窗口,主循环写起来比较轻松,关注渲染部分即可。

现在我们可以创建一个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) 销毁窗口


本例的运行结果(颜色动态变化过程)与上一例一样,只是没了背景窗口,运行中某时刻截图如下



点此领取楼主

http://blog.csdn.net/fengyhack/article/details/38299953

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值