2012-11-28 12 views
5

Pisanie aplikacji small opensitolegraph, i wymaga sposobu na zmianę wysokości kamery. Zasadniczo oko patrzy prosto na Kulę w przestrzeni. Chcę tylko obniżyć wysokość kamery, aby móc od dołu podnieść piłkę, a także podnieść wysokość kamery, jeśli zajdzie taka potrzeba. Jak osiągnąć to za pomocą kodu oPengl lub OpenScenegraph?C + + OpenSceneGraph Zmień wysokość oka kamery

int main(int argc, char* argv[]) 
{ 
    osg::ref_ptr<osg::ShapeDrawable> shape2 = new osg::ShapeDrawable; 
    shape2->setShape(new osg::Sphere(osg::Vec3(3.0f, 0.0f, 0.0f),1.0f)); 
    shape2->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f)); 
    osg::ref_ptr<osg::Geode> root = new osg::Geode; 
    root->addDrawable(shape2.get());///add first osgshapeDrawable2 
    osgViewer::Viewer viewer; 
    viewer.setSceneData(root.get());///set the Geode as scenedata for the viewer 
    return viewer.run(); 
} 

Odpowiedz

3

Musisz przejąć kontrolę nad osgViewer::Camera, nie należy próbować to zrobić z podstawowej OpenGL.

osgViewer::Viewer::getCameraWithFocus powinien otrzymać kamerę. Stąd możesz ustawić pozycję i wygląd kamery.

Pamiętaj, że w podstawowej aplikacji, jaką masz, Manipulator aparatu ustawia położenie kamery (w oparciu o interakcję z myszą) raz na klatkę.

Musisz zdecydować, w jaki sposób chcesz poradzić sobie z wprowadzaniem myszy i ewentualnie przejąć zadanie, które wykonuje Manipulator aparatu.

+0

Mam manipulator i mam aparat. Pozostaje tylko zmiana wysokości. Jak to osiągnąć? Jaką właściwość kamery mogę zmodyfikować, aby przesunąć ją w górę lub w dół w tym przypadku? – Kobojunkie

0

Użyj metody setViewMatrixAsLookAt (link) na swoim obiekcie Camera. Ta metoda ma trzy parametry:

  • eye: Pozycja kamery - można jej użyć do ustawienia jej wysokości.
  • center: Punkt, na który patrzy kamera - ustaw to w centrum obserwowanego obiektu.
  • up: Obraz wektora kamery - określa, w jaki sposób obrót ekranu zostanie obrócony wokół środka i będzie równy [0, 1, 0] w konwencjonalnym układzie współrzędnych grafiki.

Ponieważ metoda ta zajmuje się obrotem kamery poprzez określenie punktu, w którym jest to patrząc, należy zmodyfikować tylko współrzędna y w eye wektora do osiągnięcia co prosisz.

Możesz zobaczyć więcej szczegółów na temat trójki wektorowej "patrz na" here.