Blender  V2.93
NodeCamera.cpp
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
22 #include <cmath>
23 #include <cstring> // for memcpy
24 
25 #include "NodeCamera.h"
26 
27 namespace Freestyle {
28 
29 static void loadIdentity(double *matrix)
30 {
31  int i;
32 
33  // Build Identity matrix
34  for (i = 0; i < 16; ++i) {
35  double value;
36  if ((i % 5) == 0) {
37  value = 1.0;
38  }
39  else {
40  value = 0;
41  }
42  matrix[i] = value;
43  }
44 }
45 
46 NodeCamera::NodeCamera(CameraType camera_type) : camera_type_(camera_type)
47 {
50 }
51 
52 #if 0 /* UNUSED, gives warning in gcc */
53 NodeCamera::NodeCamera(const NodeCamera &iBrother) : camera_type_(iBrother.camera_type_)
54 {
55  memcpy(modelview_matrix_, iBrother.modelview_matrix_, sizeof(double[16]));
56  memcpy(projection_matrix_, iBrother.projection_matrix_, sizeof(double[16]));
57 }
58 #endif
59 
61 {
62  v.visitNodeCamera(*this);
63 }
64 
65 void NodeCamera::setModelViewMatrix(double modelview_matrix[16])
66 {
67  memcpy(modelview_matrix_, modelview_matrix, sizeof(double[16]));
68 }
69 
70 void NodeCamera::setProjectionMatrix(double projection_matrix[16])
71 {
72  memcpy(projection_matrix_, projection_matrix, sizeof(double[16]));
73 }
74 
76  : NodeCamera(NodeCamera::ORTHOGRAPHIC),
77  left_(0),
78  right_(0),
79  bottom_(0),
80  top_(0),
81  zNear_(0),
82  zFar_(0)
83 {
86 }
87 
89  double left, double right, double bottom, double top, double zNear, double zFar)
90  : NodeCamera(NodeCamera::ORTHOGRAPHIC),
91  left_(left),
92  right_(right),
93  bottom_(bottom),
94  top_(top),
95  zNear_(zNear),
96  zFar_(zFar)
97 {
99 
100  projection_matrix_[0] = 2.0 / (right - left);
101  projection_matrix_[3] = -(right + left) / (right - left);
102  projection_matrix_[5] = 2.0 / (top - bottom);
103  projection_matrix_[7] = -(top + bottom) / (top - bottom);
104  projection_matrix_[10] = -2.0 / (zFar - zNear);
105  projection_matrix_[11] = -(zFar + zNear) / (zFar - zNear);
106 }
107 
109 {
110 }
111 
112 NodePerspectiveCamera::NodePerspectiveCamera(double fovy, double aspect, double zNear, double zFar)
113  : NodeCamera(NodeCamera::PERSPECTIVE)
114 {
116 
117  double f = cos(fovy / 2.0) / sin(fovy / 2.0); // cotangent
118 
119  projection_matrix_[0] = f / aspect;
120  projection_matrix_[5] = f;
121  projection_matrix_[10] = (zNear + zFar) / (zNear - zFar);
122  projection_matrix_[11] = (2.0 * zNear * zFar) / (zNear - zFar);
123  projection_matrix_[14] = -1.0;
124  projection_matrix_[15] = 0;
125 }
126 
128  double left, double right, double bottom, double top, double zNear, double zFar)
129  : NodeCamera(NodeCamera::PERSPECTIVE)
130 {
132 
133  projection_matrix_[0] = (2.0 * zNear) / (right - left);
134  projection_matrix_[2] = (right + left) / (right - left);
135  projection_matrix_[5] = (2.0 * zNear) / (top - bottom);
136  projection_matrix_[6] = (top + bottom) / (top - bottom);
137  projection_matrix_[10] = -(zFar + zNear) / (zFar - zNear);
138  projection_matrix_[11] = -(2.0 * zFar * zNear) / (zFar - zNear);
139  projection_matrix_[14] = -1.0;
140  projection_matrix_[15] = 0;
141 }
142 
143 } /* namespace Freestyle */
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble right
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble zNear
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble top
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble bottom
Class to represent a light node.
ATTR_WARN_UNUSED_RESULT const BMVert * v
double projection_matrix_[16]
Definition: NodeCamera.h:79
virtual void accept(SceneVisitor &v)
Definition: NodeCamera.cpp:60
double modelview_matrix_[16]
Definition: NodeCamera.h:77
void setModelViewMatrix(double modelview_matrix[16])
Definition: NodeCamera.cpp:65
NodeCamera(CameraType camera_type=GENERIC)
Definition: NodeCamera.cpp:46
void setProjectionMatrix(double projection_matrix[16])
Definition: NodeCamera.cpp:70
static int left
inherits from class Rep
Definition: AppCanvas.cpp:32
static void loadIdentity(double *matrix)
Definition: NodeCamera.cpp:29
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
Definition: rall1d.h:319
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
Definition: rall1d.h:311