Blender  V3.3
SilhouetteGeomEngine.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
11 #include <vector>
12 
13 #include "../geometry/Geom.h"
14 
15 #include "../system/FreestyleConfig.h"
16 
17 #ifdef WITH_CXX_GUARDEDALLOC
18 # include "MEM_guardedalloc.h"
19 #endif
20 
21 namespace Freestyle {
22 
23 using namespace Geometry;
24 
25 class SVertex;
26 class FEdge;
27 
29  private:
30  // The viewpoint under which the silhouette has to be computed
31  static Vec3r _Viewpoint;
32  static real _translation[3];
33  // the model view matrix (_modelViewMatrix[i][j] means element of line i and column j)
34  static real _modelViewMatrix[4][4];
35  // the projection matrix (_projectionMatrix[i][j] means element of line i and column j)
36  static real _projectionMatrix[4][4];
37  // the global transformation from world to screen (projection included)
38  // (_transform[i][j] means element of line i and column j)
39  static real _transform[4][4];
40  // the viewport
41  static int _viewport[4];
42  static real _Focal;
43 
44  static real _znear;
45  static real _zfar;
46 
47  // GL style (column major) projection matrix
48  static real _glProjectionMatrix[4][4];
49  // GL style (column major) model view matrix
50  static real _glModelViewMatrix[4][4];
51 
52  static bool _isOrthographicProjection;
53 
54  static SilhouetteGeomEngine *_pInstance;
55 
56  public:
59  {
60  if (_pInstance == NULL) {
61  _pInstance = new SilhouetteGeomEngine;
62  }
63  return _pInstance;
64  }
65 
67  static inline void setViewpoint(const Vec3r &ivp)
68  {
69  _Viewpoint = ivp;
70  }
71 
82  static void setTransform(const real iModelViewMatrix[4][4],
83  const real iProjectionMatrix[4][4],
84  const int iViewport[4],
85  real iFocal);
86 
88  static void setFrustum(real iZNear, real iZFar);
89 
90  /* accessors */
91  static void retrieveViewport(int viewport[4]);
92 
98  static void ProjectSilhouette(std::vector<SVertex *> &ioVertices);
99  static void ProjectSilhouette(SVertex *ioVertex);
100 
109  static real ImageToWorldParameter(FEdge *fe, real t);
110 
112  static Vec3r WorldToImage(const Vec3r &M);
113 
115  static Vec3r CameraToImage(const Vec3r &M);
116 
117 #ifdef WITH_CXX_GUARDEDALLOC
118  MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:SilhouetteGeomEngine")
119 #endif
120 };
121 
122 } /* 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 GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Read Guarded memory(de)allocation.
static void setViewpoint(const Vec3r &ivp)
static void ProjectSilhouette(std::vector< SVertex * > &ioVertices)
static SilhouetteGeomEngine * getInstance()
#define M
inherits from class Rep
Definition: AppCanvas.cpp:18
double real
Definition: Precision.h:12