fix camera update

This commit is contained in:
Nick Fisher
2022-08-19 14:33:22 +10:00
parent cab2ac45f8
commit e64f426784
2 changed files with 24 additions and 3 deletions

View File

@@ -86,17 +86,27 @@ const float kSensitivity = 100.0f;
FilamentViewer::FilamentViewer(void *layer, LoadResource loadResource, FilamentViewer::FilamentViewer(void *layer, LoadResource loadResource,
FreeResource freeResource) FreeResource freeResource)
: _layer(layer), _loadResource(loadResource), _freeResource(freeResource) { : _layer(layer), _loadResource(loadResource), _freeResource(freeResource) {
Log("Creating FilamentViewer");
_engine = Engine::create(Engine::Backend::OPENGL); _engine = Engine::create(Engine::Backend::OPENGL);
Log("Engine created");
_renderer = _engine->createRenderer(); _renderer = _engine->createRenderer();
_renderer->setDisplayInfo({.refreshRate = 60.0f, _renderer->setDisplayInfo({.refreshRate = 60.0f,
.presentationDeadlineNanos = (uint64_t)0, .presentationDeadlineNanos = (uint64_t)0,
.vsyncOffsetNanos = (uint64_t)0}); .vsyncOffsetNanos = (uint64_t)0});
Renderer::FrameRateOptions fro;
fro.interval = 30;
_renderer->setFrameRateOptions(fro);
_scene = _engine->createScene(); _scene = _engine->createScene();
Log("Scene created");
Entity camera = EntityManager::get().create(); Entity camera = EntityManager::get().create();
_mainCamera = _engine->createCamera(camera); _mainCamera = _engine->createCamera(camera);
Log("Main camera created");
_view = _engine->createView(); _view = _engine->createView();
_view->setScene(_scene); _view->setScene(_scene);
_view->setCamera(_mainCamera); _view->setCamera(_mainCamera);
@@ -112,6 +122,8 @@ FilamentViewer::FilamentViewer(void *layer, LoadResource loadResource,
_swapChain = _engine->createSwapChain(_layer); _swapChain = _engine->createSwapChain(_layer);
Log("Swapchain created");
View::DynamicResolutionOptions options; View::DynamicResolutionOptions options;
options.enabled = true; options.enabled = true;
// options.homogeneousScaling = homogeneousScaling; // options.homogeneousScaling = homogeneousScaling;
@@ -140,7 +152,7 @@ FilamentViewer::FilamentViewer(void *layer, LoadResource loadResource,
_resourceLoader->addTextureProvider("image/png", _stbDecoder); _resourceLoader->addTextureProvider("image/png", _stbDecoder);
_resourceLoader->addTextureProvider("image/jpeg", _stbDecoder); _resourceLoader->addTextureProvider("image/jpeg", _stbDecoder);
manipulator = Manipulator<float>::Builder() manipulator = Manipulator<float>::Builder()
.orbitHomePosition(0.0f, 0.0f, 0.05f) .orbitHomePosition(0.0f, 0.0f, 1.0f)
.targetPosition(0.0f, 0.0f, 0.0f) .targetPosition(0.0f, 0.0f, 0.0f)
.build(Mode::ORBIT); .build(Mode::ORBIT);
@@ -154,6 +166,8 @@ FilamentViewer::FilamentViewer(void *layer, LoadResource loadResource,
// .castShadows(true) // .castShadows(true)
.build(*_engine, _sun); .build(*_engine, _sun);
_scene->addEntity(_sun); _scene->addEntity(_sun);
Log("Added sun");
_sceneAssetLoader = new SceneAssetLoader(_loadResource, _sceneAssetLoader = new SceneAssetLoader(_loadResource,
_freeResource, _freeResource,
@@ -528,10 +542,14 @@ void FilamentViewer::updateViewportAndCameraProjection(
_view->setViewport({0, 0, _width, _height}); _view->setViewport({0, 0, _width, _height});
const double aspect = (double)width / height; const double aspect = (double)width / height;
_mainCamera->setLensProjection(_cameraFocalLength, aspect, kNearPlane,
Camera& cam =_view->getCamera();
cam.setLensProjection(_cameraFocalLength, 1.0f, kNearPlane,
kFarPlane); kFarPlane);
Log("Set viewport to width: %d height: %d scaleFactor : %f", width, height, cam.setScaling({1.0 / aspect, 1.0});
Log("Set viewport to width: %d height: %d aspect %f scaleFactor : %f", width, height, aspect,
contentScaleFactor); contentScaleFactor);
} }

View File

@@ -88,7 +88,10 @@ namespace polyvox {
Scene* _scene; Scene* _scene;
View* _view; View* _view;
Engine* _engine; Engine* _engine;
// a default camera that we add to every scene
Camera* _mainCamera; Camera* _mainCamera;
Renderer* _renderer; Renderer* _renderer;
SwapChain* _swapChain = nullptr; SwapChain* _swapChain = nullptr;