Blender  V3.3
NodeCamera.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
8 #include <cmath>
9 #include <cstring> // for memcpy
10 
11 #include "NodeCamera.h"
12 
13 namespace Freestyle {
14 
15 static void loadIdentity(double *matrix)
16 {
17  int i;
18 
19  // Build Identity matrix
20  for (i = 0; i < 16; ++i) {
21  double value;
22  if ((i % 5) == 0) {
23  value = 1.0;
24  }
25  else {
26  value = 0;
27  }
28  matrix[i] = value;
29  }
30 }
31 
32 NodeCamera::NodeCamera(CameraType camera_type) : camera_type_(camera_type)
33 {
36 }
37 
38 #if 0 /* UNUSED, gives warning in gcc */
39 NodeCamera::NodeCamera(const NodeCamera &iBrother) : camera_type_(iBrother.camera_type_)
40 {
41  memcpy(modelview_matrix_, iBrother.modelview_matrix_, sizeof(double[16]));
42  memcpy(projection_matrix_, iBrother.projection_matrix_, sizeof(double[16]));
43 }
44 #endif
45 
47 {
48  v.visitNodeCamera(*this);
49 }
50 
51 void NodeCamera::setModelViewMatrix(double modelview_matrix[16])
52 {
53  memcpy(modelview_matrix_, modelview_matrix, sizeof(double[16]));
54 }
55 
56 void NodeCamera::setProjectionMatrix(double projection_matrix[16])
57 {
58  memcpy(projection_matrix_, projection_matrix, sizeof(double[16]));
59 }
60 
62  : NodeCamera(NodeCamera::ORTHOGRAPHIC),
63  left_(0),
64  right_(0),
65  bottom_(0),
66  top_(0),
67  zNear_(0),
68  zFar_(0)
69 {
72 }
73 
75  double left, double right, double bottom, double top, double zNear, double zFar)
76  : NodeCamera(NodeCamera::ORTHOGRAPHIC),
77  left_(left),
78  right_(right),
79  bottom_(bottom),
80  top_(top),
81  zNear_(zNear),
82  zFar_(zFar)
83 {
85 
86  projection_matrix_[0] = 2.0 / (right - left);
87  projection_matrix_[3] = -(right + left) / (right - left);
88  projection_matrix_[5] = 2.0 / (top - bottom);
89  projection_matrix_[7] = -(top + bottom) / (top - bottom);
90  projection_matrix_[10] = -2.0 / (zFar - zNear);
91  projection_matrix_[11] = -(zFar + zNear) / (zFar - zNear);
92 }
93 
95 {
96 }
97 
98 NodePerspectiveCamera::NodePerspectiveCamera(double fovy, double aspect, double zNear, double zFar)
99  : NodeCamera(NodeCamera::PERSPECTIVE)
100 {
102 
103  double f = cos(fovy / 2.0) / sin(fovy / 2.0); // cotangent
104 
105  projection_matrix_[0] = f / aspect;
106  projection_matrix_[5] = f;
107  projection_matrix_[10] = (zNear + zFar) / (zNear - zFar);
108  projection_matrix_[11] = (2.0 * zNear * zFar) / (zNear - zFar);
109  projection_matrix_[14] = -1.0;
110  projection_matrix_[15] = 0;
111 }
112 
114  double left, double right, double bottom, double top, double zNear, double zFar)
115  : NodeCamera(NodeCamera::PERSPECTIVE)
116 {
118 
119  projection_matrix_[0] = (2.0 * zNear) / (right - left);
120  projection_matrix_[2] = (right + left) / (right - left);
121  projection_matrix_[5] = (2.0 * zNear) / (top - bottom);
122  projection_matrix_[6] = (top + bottom) / (top - bottom);
123  projection_matrix_[10] = -(zFar + zNear) / (zFar - zNear);
124  projection_matrix_[11] = -(2.0 * zFar * zNear) / (zFar - zNear);
125  projection_matrix_[14] = -1.0;
126  projection_matrix_[15] = 0;
127 }
128 
129 } /* 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:65
virtual void accept(SceneVisitor &v)
Definition: NodeCamera.cpp:46
double modelview_matrix_[16]
Definition: NodeCamera.h:63
void setModelViewMatrix(double modelview_matrix[16])
Definition: NodeCamera.cpp:51
NodeCamera(CameraType camera_type=GENERIC)
Definition: NodeCamera.cpp:32
void setProjectionMatrix(double projection_matrix[16])
Definition: NodeCamera.cpp:56
static int left
inherits from class Rep
Definition: AppCanvas.cpp:18
static void loadIdentity(double *matrix)
Definition: NodeCamera.cpp:15
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