Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/camera.cc @ 3641

Last change on this file since 3641 was 3641, checked in by bensch, 19 years ago

orxonox/trunk: kamera-update: rockt

File size: 3.8 KB
Line 
1
2
3/*
4   orxonox - the future of 3D-vertical-scrollers
5
6   Copyright (C) 2004 orx
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   ### File Specific:
14   main-programmer: Christian Meyer
15   co-programmer: ...
16*/
17
18#include "camera.h"
19
20#include "world.h"
21#include "world_entity.h"
22#include "vector.h"
23
24using namespace std;
25
26////////////
27// CAMERA //
28////////////
29
30/**
31   \brief creates a Camera
32*/
33Camera::Camera(void)
34{
35  this->setClassName("Camera");
36  this->target = new CameraTarget();
37
38  this->setFovy(90);
39  this->setAspectRatio(1.2f);
40  this->setClipRegion(.1, 2000);
41
42  this->setViewMode(VIEW_NORMAL);
43}
44
45/**
46   \brief default destructor
47*/
48Camera::~Camera(void)
49{
50}
51
52/**
53   \brief focuses the Camera onto a Target
54   \param target the new PNode the Camera should look at.
55*/
56void Camera::lookAt(PNode* target)
57{
58  this->target->setParent(target);
59}
60
61/**
62   \returns The PNode of the Target (from there you can get position and so on
63*/
64PNode* Camera::getTarget(void)
65{
66  return (PNode*)this->target;
67}
68
69
70/**
71   \brief sets a new AspectRatio
72   \param aspectRatio the new aspect ratio to set (width / height)
73*/
74void Camera::setAspectRatio(float aspectRatio)
75{
76  this->aspectRatio = aspectRatio;
77}
78
79/**
80   \brief sets the Field of View to fofy
81   \param fovy new field of view factor (in degrees)
82*/
83void Camera::setFovy(float fovy)
84{
85  this->fovy = fovy;
86}
87
88/**
89  \brief Sets a new clipping region
90  \param nearClip The near clip plane
91  \param farClip The far clip plane
92*/
93void Camera::setClipRegion(float nearClip, float farClip)
94{
95  this->nearClip = nearClip;
96  this->farClip = farClip;
97}
98
99void Camera::setViewMode(ViewMode mode)
100{
101  switch (mode)
102    {
103    default:
104    case VIEW_NORMAL:
105      this->toFovy = 60.0;
106      this->toRelCoor = Vector (-10, 5, 0);
107      break;
108    case VIEW_BEHIND:
109      this->toFovy = 90.0;
110      this->toRelCoor = Vector (-6, 2, 0);
111      break;
112    case VIEW_FRONT:
113      this->toFovy = 95.0;
114      this->toRelCoor = Vector (10, 5, 0);
115      break;
116    case VIEW_LEFT: 
117      this->toFovy = 90;
118      this->toRelCoor = Vector (0, 2, -10);
119      break;
120    case VIEW_RIGHT:
121      this->toFovy = 90;
122      this->toRelCoor = Vector (0, 2, 10);
123      break;
124    }
125}
126
127
128/**
129   \brief Updates the position of the camera.
130   \param dt The time that elapsed.
131*/
132void Camera::tick(float dt)
133{
134  dt /= 1000;
135  this->fovy += (this->toFovy - this->fovy) * dt;
136  Vector tmp = this->getRelCoor() + (this->toRelCoor - this->getRelCoor()) * dt;
137  this->setRelCoor(&tmp);
138  PRINTF(0)("%f %f %f\n", tmp.x, tmp.y, tmp.z);
139}
140
141
142/**
143   \brief initialize rendering perspective according to this camera
144   
145   This is called immediately before the rendering cycle starts, it sets all global
146   rendering options as well as the GL_PROJECTION matrix according to the camera.
147*/
148void Camera::apply ()
149{
150  // switching to Projection Matrix
151  glMatrixMode (GL_PROJECTION);
152  glLoadIdentity ();
153
154  // setting up the perspective
155  gluPerspective(this->fovy,
156                 this->aspectRatio,
157                 this->nearClip,
158                 this->farClip);
159
160  // speed-up feature
161  Vector cameraPosition = this->getAbsCoor();
162  Vector targetPosition = this->target->getAbsCoor();
163  Vector up = Vector(0, 1, 0);
164  up = this->getAbsDir().apply(up);
165
166  // Setting the Camera Eye, lookAt and up Vectors
167  gluLookAt(cameraPosition.x, cameraPosition.y, cameraPosition.z,
168            targetPosition.x, targetPosition.y, targetPosition.z,
169            up.x, up.y, up.z);
170
171  // switching back to Modeling Matrix
172  glMatrixMode (GL_MODELVIEW);
173}
174
175
176
177///////////////////
178// CAMERA-TARGET //
179///////////////////
180
181
182CameraTarget::CameraTarget()
183{
184  this->setClassName("CameraTarget");
185  this->setMode(PNODE_MOVEMENT);
186}
187
188CameraTarget::~CameraTarget()
189{
190
191}
Note: See TracBrowser for help on using the repository browser.