1// tCamera.cpp 
2// 
3// The camera tScene object. The primary members are a 4x4 homogeneous projection matrix and a type member that 
4// indicates the type of projection matrix being stored. We could add depth-of-field members at a later time. 
5// 
6// Copyright (c) 2006, 2017 Tristan Grimmer. 
7// Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby 
8// granted, provided that the above copyright notice and this permission notice appear in all copies. 
9// 
10// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL 
11// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 
12// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 
13// AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
14// PERFORMANCE OF THIS SOFTWARE. 
15 
16#include "Scene/tCamera.h" 
17namespace tScene 
18
19 
20 
21void tCamera::Scale(float scale
22
23 switch (ProjectionMode
24
25 case tProjectionMode::Perspective
26 case tProjectionMode::PerspectiveOblique
27
28 float fovV, fovH, aspect, nearPlane, farPlane, offsetX, offsetY
29 Projection.ExtractPerspective(fovV, fovH, aspect, nearPlane, farPlane, offsetX, offsetY); 
30 nearPlane *= scale
31 farPlane *= scale
32 Projection.MakeProjPerspFovVOffset(fovV, aspect, nearPlane, farPlane, offsetX, offsetY); 
33 break
34
35 
36 case tProjectionMode::Parallel
37
38 tMath::tMatrix4 scaleMat
39 scaleMat.MakeScale(scale); 
40 Projection = scale*Projection
41 break
42
43
44
45 
46 
47void tCamera::Save(tChunkWriter& chunk) const 
48
49 chunk.Begin(tChunkID::Scene_Camera); 
50
51 chunk.Begin(tChunkID::Scene_Object); 
52 tObject::Save(chunk); 
53 chunk.End(); 
54 
55 chunk.Begin(tChunkID::Scene_CameraParameters); 
56 chunk.Write(ProjectionMode); 
57 chunk.End(); 
58 
59 chunk.Begin(tChunkID::Scene_Projection); 
60 chunk.Write(Projection); 
61 chunk.End(); 
62
63 chunk.End(); 
64
65 
66 
67void tCamera::Load(const tChunk& camChunk
68
69 tAssert(camChunk.ID() == tChunkID::Scene_Camera); 
70 Clear(); 
71 
72 for (tChunk chunk = camChunk.First(); chunk.Valid(); chunk = chunk.Next()) 
73
74 switch (chunk.ID()) 
75
76 case tChunkID::Scene_Object
77 tObject::Load(chunk); 
78 break
79 
80 case tChunkID::Scene_CameraParameters
81 chunk.GetItem(ProjectionMode); 
82 break
83 
84 case tChunkID::Scene_Projection
85 chunk.GetItem(Projection); 
86 break
87
88
89
90 
91 
92
93