-
Notifications
You must be signed in to change notification settings - Fork 2
/
Camera.cpp
65 lines (52 loc) · 1.57 KB
/
Camera.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// @Begin License@
// This file is part of Coldest.
//
// Coldest is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Coldest is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Coldest. If not, see <http://www.gnu.org/licenses/>.
//
// Copyright 2008-2012 Ben Nemec
// @End License@
#include "Camera.h"
Camera::Camera() : interp(50.f), lookinterp(50.f), absolute(false)
{
}
void Camera::SetPosition(const Vector3& newpos)
{
position = newpos;
}
void Camera::Place()
{
gluLookAt(actual.x, actual.y, actual.z, actuallook.x, actuallook.y, actuallook.z, 0.f, 1.f, 0.f);
}
void Camera::Update()
{
float currtime = timer.elapsed();
timer.start();
float interpval = interp * currtime / 50.f;
float lookinterpval = lookinterp * currtime / 50.f;
interpval = clamp(0.f, 1.f, interpval);
lookinterpval = clamp(0.f, 1.f, lookinterpval);
actual = lerp(position, actual, interpval);
if (!absolute)
actuallook = lerp(lookat, actuallook, lookinterpval);
else
actuallook = actual + lookat;
}
Vector3 Camera::GetActual() const
{
return actual;
}
Vector3 Camera::GetActualLook() const
{
return actuallook;
}