Visualization Library 2.1.0
A lightweight C++ OpenGL middleware for 2D/3D graphics
|
[Download] [Tutorials] [All Classes] [Grouped Classes] |
The BezierSurface class implements a Geometry that is capable of visualizing multiple bicubic Bézier patches (see BezierPatch). More...
#include <BezierSurface.hpp>
Public Member Functions | |
BezierSurface () | |
Constructor. More... | |
std::vector< ref< BezierPatch > > & | patches () |
Returns the Bézier patches that are part of this Bézier surface. More... | |
const std::vector< ref< BezierPatch > > & | patches () const |
Returns the Bézier patches that are part of this Bézier surface. More... | |
void | setDetail (unsigned i) |
The sampling level of the patch, must not be less than 2. The higher the sampling level, the more detailed the patch will be. More... | |
unsigned | detail () const |
The sampling level of the patch, must not be less than 2. The higher the sampling level, the more detailed the patch will be. More... | |
void | updateBezierSurface (bool gen_tex_coords=true) |
Generates the Bézier surface geometry based on the current patches and detail. More... | |
Public Member Functions inherited from vl::Geometry | |
Geometry () | |
Constructor. More... | |
virtual | ~Geometry () |
Destructor. More... | |
ref< Geometry > | shallowCopy () const |
Performs a shallow copy of a Geometry. More... | |
Geometry & | shallowCopyFrom (const Geometry &) |
Performs a shallow copy of the specified Geometry. More... | |
ref< Geometry > | deepCopy () const |
Performs a deep copy of a Geometry. More... | |
Geometry & | deepCopyFrom (const Geometry &) |
Performs a deep copy of the specified Geometry. More... | |
Collection< DrawCall > & | drawCalls () |
Returns the list of DrawCall objects bound to a Geometry. More... | |
const Collection< DrawCall > & | drawCalls () const |
Returns the list of DrawCall objects bound to a Geometry. More... | |
void | setColorArray (const fvec4 &color) |
Fills the color array with the given color. More... | |
virtual void | clearArrays (bool clear_draw_calls=true) |
Removes all the previously installed arrays. More... | |
virtual void | updateDirtyBufferObject (EBufferObjectUpdateMode mode) |
Updates all the vertex buffer objects of both vertex arrays and draw calls that are marked as dirty. More... | |
virtual void | deleteBufferObject () |
Deletes all the vertex buffer objects of both vertex arrays and draw calls. More... | |
void | computeNormals (bool verbose=false) |
Computes the normals in a "smooth" way, i.e. More... | |
bool | flipNormals () |
Inverts the orientation of the normals. More... | |
void | fixTriangleWinding () |
Converts all draw calls to triangles and fixes their winding according to the Geometry's normals. More... | |
void | transform (const mat4 &matr, bool normalize=true) |
Transforms vertices and normals belonging to this geometry. More... | |
void | convertDrawCallToDrawArrays () |
Converts all the DrawCall objects bound to a Geometry into DrawArrays. More... | |
DrawCall * | mergeTriangleStrips () |
Merges all the PT_TRIANGLE_STRIP DrawElementsUInt objects into one single PT_TRIANGLE_STRIP DrawElementsUInt. More... | |
void | mergeDrawCallsWithPrimitiveRestart (EPrimitiveType primitive_type) |
Merges all the draw calls that use the given primitive type into one single draw call using primitive restart. More... | |
void | mergeDrawCallsWithMultiDrawElements (EPrimitiveType primitive_type) |
Merges all the draw calls that use the given primitive type into one single MultiDrawElements draw call. More... | |
void | mergeDrawCallsWithTriangles (EPrimitiveType primitive_type) |
Merges all the draw calls that use the given primitive type or PT_TRIANGLES into one single PT_TRIANGLES draw call. More... | |
void | triangulateDrawCalls () |
Converts PT_QUADS, PT_QUADS_STRIP and PT_POLYGON into PT_TRIANGLE primitives. More... | |
DrawRangeElements *MultiDrawElements *to the best fitting of *UInt UShort UByte *taking into instancing and base vertex *note Primitive type can be any *void | shrinkDrawCalls () |
void | makeGLESFriendly () |
Calls triangulateDrawCalls() and shrinkDrawCalls(). More... | |
bool | sortVertices () |
Sorts the vertices of the geometry (position, normals, textures, colors etc.) to maximize vertex-cache coherency. More... | |
void | regenerateVertices (const std::vector< u32 > &map_new_to_old) |
Regenerates the vertex position and attributes using the given new-to-old map. More... | |
void | colorizePrimitives () |
Assigns a random color to each vertex of each DrawCall object. If a vertex is shared among more than one DrawCall object its color is undefined. More... | |
void | setVertexArray (ArrayAbstract *data) |
Conventional vertex array. More... | |
const ArrayAbstract * | vertexArray () const |
Conventional vertex array. More... | |
ArrayAbstract * | vertexArray () |
Conventional vertex array. More... | |
void | setNormalArray (ArrayAbstract *data) |
Conventional normal array. More... | |
const ArrayAbstract * | normalArray () const |
Conventional normal array. More... | |
ArrayAbstract * | normalArray () |
Conventional normal array. More... | |
void | setColorArray (ArrayAbstract *data) |
Conventional color array. More... | |
const ArrayAbstract * | colorArray () const |
Conventional color array. More... | |
ArrayAbstract * | colorArray () |
Conventional color array. More... | |
void | setSecondaryColorArray (ArrayAbstract *data) |
Conventional secondary color array. More... | |
const ArrayAbstract * | secondaryColorArray () const |
Conventional secondary color array. More... | |
ArrayAbstract * | secondaryColorArray () |
Conventional secondary color array. More... | |
void | setFogCoordArray (ArrayAbstract *data) |
Conventional fog array. More... | |
const ArrayAbstract * | fogCoordArray () const |
Conventional fog array. More... | |
ArrayAbstract * | fogCoordArray () |
Conventional fog array. More... | |
void | setTexCoordArray (int tex_unit, ArrayAbstract *data) |
Conventional texture coords arrays. More... | |
const ArrayAbstract * | texCoordArray (int tex_unit) const |
Conventional texture coords arrays. More... | |
ArrayAbstract * | texCoordArray (int tex_unit) |
Conventional texture coords arrays. More... | |
void | setVertexAttribArray (int attrib_location, const ArrayAbstract *info) |
Binds a generic vertex attribute. More... | |
const ArrayAbstract * | vertexAttribArray (int attrib_location) const |
Returns a generic vertex attribute's info. More... | |
ArrayAbstract * | vertexAttribArray (int attrib_location) |
Returns a generic vertex attribute's info. More... | |
Public Member Functions inherited from vl::Renderable | |
Renderable () | |
Constructor. More... | |
virtual | ~Renderable () |
Destructor. More... | |
void | render (const Actor *actor, const Shader *shader, const Camera *camera, OpenGLContext *gl_context) |
Renders the Renderable and if necessary compiles the display list and updates the BufferObjects. More... | |
void | computeBounds () |
Recomputes the bounding box and bounding sphere of a Renderable. More... | |
long long | boundsUpdateTick () const |
Returns the bounds-update-tick which is a counter incremented every time the bounding box or bounding sphere is updated. More... | |
void | setBoundsDirty (bool dirty) |
Marks the bounding box and bounding sphere as dirty in order to be recomputed at the next rendering. More... | |
bool | boundsDirty () const |
Returns whether the bounding sphere or bounding box are "dirty", that is, meant to be recomputed. More... | |
void | setBoundingBox (const AABB &aabb) |
Sets the bounding box of a Renderable. More... | |
void | setBoundingSphere (const Sphere &sphere) |
Sets the bounding sphere of a Renderable. More... | |
const AABB & | boundingBox () const |
Returns the bounding box of a Renderable without recomputing the bounds if dirty. More... | |
const Sphere & | boundingSphere () const |
Returns the bounding sphere of a Renderable without recomputing the bounds if dirty. More... | |
const AABB & | boundingBox () |
Returns the bounding box of a Renderable recomputing the bounds if dirty. More... | |
const Sphere & | boundingSphere () |
Returns the bounding sphere of a Renderable recomputing the bounds if dirty. More... | |
unsigned int | displayList () const |
Returns the display list associated to a Renderable or 0 (zero) if no display list is associated. More... | |
void | setDisplayList (unsigned int disp_list) |
Manually assciates a display list to a Renderable (to be used with care). More... | |
bool | isDisplayListEnabled () const |
Returns true if display lists are enabled for a Renderable (disabled by default). More... | |
void | setDisplayListEnabled (bool enabled) |
Enable/disable display lists (disabled by default). More... | |
bool | displayListDirty () const |
Whether the display list associated to a Renderable should be recompiled at the next rendering. More... | |
void | setDisplayListDirty (bool dirty) |
Whether the display list associated to a Renderable should be recompiled at the next rendering. More... | |
bool | isBufferObjectEnabled () const |
Returns true if BufferObject (vertex buffer object) are enabled for a Renderable (enabled by default). More... | |
void | setBufferObjectEnabled (bool enabled) |
Enable/disable BufferObject (vertex buffer object) (enabled by default). More... | |
bool | isBufferObjectDirty () const |
Whether BufferObjects associated to a Renderable should be recomputed on the next rendering. More... | |
void | setBufferObjectDirty (bool dirty=true) |
Whether BufferObjects associated to a Renderable should be recomputed on the next rendering. More... | |
void | deleteDisplayList () |
Deletes the display list currently associated to a Renderable. More... | |
Public Member Functions inherited from vl::Object | |
Object () | |
Constructor. More... | |
Object (const Object &other) | |
Copy constructor: copies the name, ref count mutex and user data. More... | |
Object & | operator= (const Object &other) |
Copy operator: copies the object's name, ref count mutex and user data. More... | |
const std::string & | objectName () const |
The name of the object, by default set to the object's class name. More... | |
void | setObjectName (const char *name) |
The name of the object, by default set to the object's class name in debug builds. More... | |
void | setObjectName (const std::string &name) |
The name of the object, by default set to the object's class name in debug builds. More... | |
void | setRefCountMutex (IMutex *mutex) |
The mutex used to protect the reference counting of an Object across multiple threads. More... | |
IMutex * | refCountMutex () |
The mutex used to protect the reference counting of an Object across multiple threads. More... | |
const IMutex * | refCountMutex () const |
The mutex used to protect the reference counting of an Object across multiple threads. More... | |
int | referenceCount () const |
Returns the number of references of an object. More... | |
void | incReference () const |
Increments the reference count of an object. More... | |
void | decReference () |
Decrements the reference count of an object and deletes it if both automaticDelete() is true the count reaches 0. More... | |
void | setAutomaticDelete (bool autodel_on) |
If set to true the Object is deleted when its reference count reaches 0. More... | |
bool | automaticDelete () const |
If set to true the Object is deleted when its reference count reaches 0. More... | |
template<class T > | |
T * | as () |
Casts an Object to the specified class. More... | |
template<class T > | |
const T * | as () const |
Casts an Object to the specified class. More... | |
Protected Attributes | |
std::vector< ref< BezierPatch > > | mPatches |
unsigned | mDetail |
Protected Attributes inherited from vl::Geometry | |
Collection< DrawCall > | mDrawCalls |
ref< ArrayAbstract > | mVertexAttribArrays [VA_MaxAttribCount] |
Protected Attributes inherited from vl::Object | |
std::string | mObjectName |
IMutex * | mRefCountMutex |
int | mReferenceCount |
bool | mAutomaticDelete |
Additional Inherited Members | |
Static Public Member Functions inherited from vl::Geometry | |
static void | computeTangentSpace (u32 vert_count, const vl::fvec3 *vertex, const vl::fvec3 *normal, const vl::fvec2 *texcoord, const vl::DrawCall *primitives, vl::fvec3 *tangent, vl::fvec3 *bitangent) |
Computes the tangent (and optionally bitangent) vectors used to form a TBN matrix to be used for bumpmapping. More... | |
Public Attributes inherited from vl::Geometry | |
DrawRangeElements *MultiDrawElements *to the best fitting of *UInt UShort UByte *taking into | account: primitive restart |
Shrinks DrawElements. More... | |
Protected Member Functions inherited from vl::Geometry | |
virtual void | computeBounds_Implementation () |
virtual void | render_Implementation (const Actor *actor, const Shader *shader, const Camera *camera, OpenGLContext *gl_context) const |
Protected Member Functions inherited from vl::Renderable | |
Renderable & | operator= (const Renderable &)=default |
operator= More... | |
Protected Member Functions inherited from vl::Object | |
virtual | ~Object () |
The BezierSurface class implements a Geometry that is capable of visualizing multiple bicubic Bézier patches (see BezierPatch).
From Wikipedia [http://en.wikipedia.org/wiki/Bézier_surface]:
"Bézier surfaces are a species of mathematical spline used in computer graphics, computer-aided design, and finite element modelling. As with the Bézier curve, a Bézier surface is defined by a set of control points. Similar to interpolation in many respects, a key difference is that the surface does not, in general, pass through the central control points; rather, it is "stretched" toward them as though each were an attractive force. They are visually intuitive, and for many applications, mathematically convenient."
"Bézier surfaces were first described in 1972 by the French engineer Pierre Bézier who used them to design automobile bodies. Bézier surfaces can be of any degree, but bicubic Bézier surfaces generally provide enough degrees of freedom for most applications."
See also:
Definition at line 94 of file BezierSurface.hpp.
|
inline |
Constructor.
Definition at line 100 of file BezierSurface.hpp.
|
inline |
The sampling level of the patch, must not be less than 2. The higher the sampling level, the more detailed the patch will be.
Definition at line 114 of file BezierSurface.hpp.
|
inline |
Returns the Bézier patches that are part of this Bézier surface.
Definition at line 106 of file BezierSurface.hpp.
Referenced by vl::makeTeapot().
|
inline |
Returns the Bézier patches that are part of this Bézier surface.
Definition at line 108 of file BezierSurface.hpp.
|
inline |
The sampling level of the patch, must not be less than 2. The higher the sampling level, the more detailed the patch will be.
Definition at line 111 of file BezierSurface.hpp.
Referenced by vl::makeTeapot().
void BezierSurface::updateBezierSurface | ( | bool | gen_tex_coords = true | ) |
Generates the Bézier surface geometry based on the current patches and detail.
Note that this method does not recompte the normals of the mesh, this means that if you are using the OpenGL lighting or other techniques requiring vertex normals you should call computeNormals() right after calling this function.
gen_tex_coords | If set to true the function will also generate normalized (0..1) texture coordinates. |
Definition at line 87 of file BezierSurface.cpp.
References vl::BezierPatch::at(), vl::Array< T_VectorType, T_Scalar, T_GL_Size, T_GL_Type >::at(), vl::ref< T >::get(), vl::DrawElements< arr_type >::indexBuffer(), NULL, vl::PT_QUADS, vl::Array< T_VectorType, T_Scalar, T_GL_Size, T_GL_Type >::resize(), vl::ArrayAbstract::setBufferObjectDirty(), vl::BezierPatch::x(), vl::Vector2< T_Scalar >::x(), vl::BezierPatch::y(), and vl::Vector2< T_Scalar >::y().
Referenced by vl::makeTeapot().
|
protected |
Definition at line 124 of file BezierSurface.hpp.
|
protected |
Definition at line 123 of file BezierSurface.hpp.
Visualization Library 2.1.0 Reference Documentation
Updated on Wed Mar 10 2021 16:02:48.
© Copyright Michele Bosi. All rights reserved.