|
|
发表于 2007-12-10 10:44:00
|
显示全部楼层
Re:在ogre中是否能自己控制渲染的流程呢?而不是直接mRoot
自己创建游戏窗口,不要用引擎的go..和startRendering();
然后用自己窗口的hwnd创建一个renderWindow
NameValuePairList param;
param["left"] = "0";
param["top"] = "0";
param["title"] = "render window";
param["externalWindowHandle"] = StringConverter::toString((size_t)hWnd);
RenderWindow *pRenderWindow = mRoot->createRenderWindow(RENDER_WINDOW_NAME, 800, 600, false, &param);
if (!pRenderWindow)
{
return false;
}
然后和普通游戏一样..你可以
while (GetMessage(&msg, NULL, 0, 0))
{
SDK::IEngine::GetInstance()->Render();
TranslateMessage(&msg);
DispatchMessage(&msg);
}
其中SDK::IEngine::GetInstance()->Render();是我封装过的..里面就是调用mRoot->renderOneFrame();
而且这样做在你的winProc中也可以自由控制
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
{
PostQuitMessage(0);
break;
}
case WM_PAINT:
{
//char str[255] = {0};
//sprintf(str, "天空盒子+地板+兽头+摄像机+灯光+雾的例子 fps is %f", Engine::GetInstancePtr()->GetFps());
//SetWindowText(hWnd, str);
SDK::IEngine::GetInstance()->Render();
break;
}
case WM_ERASEBKGND:
{
return 1;
}
default:
{
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
return 0;
} |
|