We are going to add to your 3D scene a navigation facility known to us since we modelled a 3D software. Using MayaCamUI
, you can do this with just a few lines of code.
We need to have some 3D objects in our scene. You can use some primitives provided by Cinder, for example:
gl::drawColorCube(Vec3f::zero(), Vec3f(4.f, 4.f, 4.f));
A color cube is a cube with a different color on each face, so it is easy to determine the orientation.
Perform the following steps to create camera navigation:
MayaCam.h
header file:#include "cinder/MayaCamUI.h"
CameraPersp mCam; MayaCamUI mMayaCam;
setup
method, we are going to set up the camera's initial state:mCam.setPerspective(45.0f, getWindowAspectRatio(), 0.1, 10000); mMayaCam.setCurrentCam(mCam);
void MainApp::resize( ResizeEvent event ) { mCam = mMayaCam.getCamera(); mCam.setAspectRatio(getWindowAspectRatio()); mMayaCam.setCurrentCam(mCam); } void MainApp::mouseDown( MouseEvent event ) { mMayaCam.mouseDown( event.getPos() ); } void MainApp::mouseDrag( MouseEvent event ) { mMayaCam.mouseDrag( event.getPos(), event.isLeftDown(), event.isMiddleDown(), event.isRightDown() ); }
draw
method:gl::setMatrices(mMayaCam.getCamera());
Inside the setup
method, we set the initial camera settings. While the window is resizing, we have to update the aspect ratio of our camera, so we put the code for this in the resize
method. This method is automatically invoked by Cinder each time the window of our application is resized. We catch mouse events inside the mouseDown
and mouseDrag
methods. You can click and drag your mouse for tumbling, right-click for zooming, and use the middle button for panning. Now you have interaction similar to a common 3D modeling software in your own application.
18.119.103.204