Я уже запутался, использовать ли мне Mangalore? Использовать ли nApplication? Использовать ли nNebulaUsePackage(package) + nKernelServer.AddPackage(package)? Как вы делаете? Может что-нить подскажите
Присоединяюсь к вопросу )
Я только начал разбираться с Nebula, включил в свой проект только исходники из nebula2 (без Mangalore). Использую nNebulaUsePackage и nKernelServer.AddPackage. Всё компилится, окошко создаётся, НО ничё не рисуется.
Люди, покажите, пожалуйста, как нарисовать простой красный кубик, а то никак не получается.
У меня примерно так:
... nGfxServer2* gfxServer = refGfxServer.get(); nLight light; light.SetAmbient(vector4(0.2f, 0.2f, 0.2f, 1.0f)); light.SetDiffuse(vector4(0.8f, 0.8f, 0.8f, 1.0f)); light.SetSpecular(vector4(1.0f, 1.0f, 1.0f, 1.0f)); light.SetType(nLight::Type::Point); matrix44 lightTrans = matrix44.identity; lightTrans.translate(vector3(-10.0f, -10.0f, -10.0f)); light.SetTransform(lightTrans); gfxServer->AddLight(light); nCamera2 camera; camera.SetPerspective(60.0f, 4.0f/3.0f, 0.1f, 1000.0f); camera.SetType(nCamera2::Type::Perspective); gfxServer->SetCamera(camera); // trigger the gfx server once every frame // Trigger() returns false if you close the window while (gfxServer->Trigger()) { gfxServer->BeginFrame(); gfxServer->BeginScene(); gfxServer->Clear(nGfxServer2::ColorBuffer | nGfxServer2::DepthBuffer, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0); Render(); gfxServer->EndScene(); gfxServer->PresentScene(); gfxServer->EndFrame(); // allow Windows to multitask n_sleep(0.0); } ... void Render() { nGfxServer2* gfxServer = refGfxServer.get(); matrix44 tran; tran = matrix44.identity; gfxServer->BeginShapes(); gfxServer->DrawShape(nGfxServer2::ShapeType::Box, tran, vector4(1.0f, 0.0f, 0.0f, 1.0f)); gfxServer->EndShapes(); }
1. Освещение. Лучше все-таки прочитать stdlight.n2 и уж точно рендерить источник света на каждом кадре.
2. Камера стоит в нуле, кубик рисуется тоже в нуле. Так что может быть мы просто видим back-face, который мы не видим.
3. this->refGuiServer->Trigger(); и попробовать увидеть менюшку.
4. не gfxServer->BeginScene(), а refSceneServer->BeginScene(viewMatrix)
5. основной цикл:
if (this->refSceneServer->BeginScene(viewMatrix))
{
for (uint index = 0; index < this->nodeList.GetCount(); index++)
{
this->refSceneServer->Attach(this->nodeList.GetRenderContextAt(index));
}
/*
вот здесь, например, вызвать рендер кубика
/
this->refSceneServer->RenderScene(); // renders the 3d scene
this->refSceneServer->EndScene();
this->OnFrameRendered();
this->refSceneServer->PresentScene(); // present the frame
}
-------
Это то, что сразу бросилось в глаза. Самое главное - refSceneServer->RenderScene() - не вызывалось!
STC
спасибо за советы.
Тема в архиве.