SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
SLSpheric Class Reference

SLSphere creates a sphere mesh based on SLRevolver. More...

#include <SLSpheric.h>

Inheritance diagram for SLSpheric:
[legend]

Public Member Functions

 SLSpheric (SLAssetManager *assetMgr, SLfloat radius, SLfloat thetaStartDEG, SLfloat thetaEndDEG, SLuint stacks=32, SLuint slices=32, SLstring name="spheric mesh", SLMaterial *mat=nullptr)
 
SLfloat radius ()
 
- Public Member Functions inherited from SLRevolver
 SLRevolver (SLAssetManager *assetMgr, SLVVec3f revolvePoints, SLVec3f revolveAxis, SLuint slices=36, SLbool smoothFirst=false, SLbool smoothLast=false, SLstring name="revolver mesh", SLMaterial *mat=nullptr)
 ctor for generic revolver mesh More...
 
 SLRevolver (SLAssetManager *assetMgr, SLstring name)
 ctor for derived revolver shapes More...
 
void buildMesh (SLMaterial *mat=nullptr)
 
SLuint stacks ()
 
SLuint slices ()
 
- Public Member Functions inherited from SLMesh
 SLMesh (SLAssetManager *assetMgr, const SLstring &name="Mesh")
 Construct a new SLMesh::SLMesh object. More...
 
 ~SLMesh () override
 The destructor deletes everything by calling deleteData. More...
 
virtual void init (SLNode *node)
 SLMesh::shapeInit sets the transparency flag of the AABB. More...
 
virtual void draw (SLSceneView *sv, SLNode *node, SLuint intances=0)
 
void drawIntoDepthBuffer (SLSceneView *sv, SLNode *node, SLMaterial *depthMat)
 Simplified drawing method for shadow map creation. More...
 
void addStats (SLNodeStats &stats)
 
virtual void buildAABB (SLAABBox &aabb, const SLMat4f &wmNode)
 
void updateAccelStruct ()
 
SLbool hit (SLRay *ray, SLNode *node)
 
virtual void preShade (SLRay *ray)
 
virtual void deleteData ()
 SLMesh::deleteData deletes all mesh data and vbo's. More...
 
virtual void deleteDataGpu ()
 
void deleteSelected (SLNode *node)
 Deletes the rectangle selected vertices and the dependent triangles. More...
 
void deleteUnused ()
 Deletes unused vertices (= vertices that are not indexed in I16 or I32) More...
 
virtual void calcMinMax ()
 
virtual void calcNormals ()
 SLMesh::calcNormals recalculates vertex normals for triangle meshes. More...
 
void calcCenterRad (SLVec3f &center, SLfloat &radius)
 
SLbool hitTriangleOS (SLRay *ray, SLNode *node, SLuint iT)
 
virtual void generateVAO (SLGLVertexArray &vao)
 Generate the Vertex Array Object for a specific shader program. More...
 
void computeHardEdgesIndices (float angleRAD, float epsilon)
 computes the hard edges and stores the vertex indexes separately More...
 
void transformSkin (bool forceCPUSkinning, const std::function< void(SLMesh *)> &cbInformNodes)
 Transforms the vertex positions and normals with by joint weights. More...
 
void deselectPartialSelection ()
 
SLMaterialmat () const
 
SLMaterialmatOut () const
 
SLGLPrimitiveType primitive () const
 
const SLAnimSkeletonskeleton () const
 
SLuint numI () const
 
SLGLVertexArrayvao ()
 
SLbool isSelected () const
 
SLfloat edgeAngleDEG () const
 
SLfloat edgeWidth () const
 
SLCol4f edgeColor () const
 
SLVec3f finalP (SLuint i)
 
SLVec3f finalN (SLuint i)
 
SLbool accelStructIsOutOfDate ()
 
void mat (SLMaterial *m)
 
void matOut (SLMaterial *m)
 
void primitive (SLGLPrimitiveType pt)
 
void skeleton (SLAnimSkeleton *skel)
 
void isSelected (bool isSelected)
 
void edgeWidth (SLfloat ew)
 
void edgeAngleDEG (SLfloat ea)
 
void edgeColor (const SLCol4f &ec)
 
void vertexPosEpsilon (SLfloat eps)
 
- Public Member Functions inherited from SLObject
 SLObject (const SLstring &Name="", const SLstring &url="")
 
virtual ~SLObject ()
 
void name (const SLstring &Name)
 
void url (const SLstring &url)
 
const SLstringname () const
 
const SLstringurl () const
 

Protected Attributes

SLfloat _radius
 radius of the sphere More...
 
SLfloat _thetaStartDEG
 Polar start angle 0-180deg. More...
 
SLfloat _thetaEndDEG
 Polar end angle 1-180deg. More...
 
- Protected Attributes inherited from SLRevolver
SLVVec3f _revPoints
 Array revolving points. More...
 
SLVec3f _revAxis
 axis of revolution More...
 
SLuint _stacks
 No. of stacks (mostly used) More...
 
SLuint _slices
 NO. of slices. More...
 
SLbool _smoothFirst
 flag if the normal of the first point is eqaual to -revAxis More...
 
SLbool _smoothLast
 flag if the normal of the last point is eqaual to revAxis More...
 
- Protected Attributes inherited from SLMesh
SLGLPrimitiveType _primitive
 Primitive type (default triangles) More...
 
SLMaterial_mat
 Pointer to the inside material. More...
 
SLMaterial_matOut
 Pointer to the outside material. More...
 
SLGLVertexArray _vao
 Main OpenGL Vertex Array Object for drawing. More...
 
SLGLVertexArrayExt _vaoN
 OpenGL VAO for optional normal drawing. More...
 
SLGLVertexArrayExt _vaoT
 OpenGL VAO for optional tangent drawing. More...
 
SLGLVertexArrayExt _vaoS
 OpenGL VAO for optional selection drawing. More...
 
SLbool _isSelected
 Flag if mesh is partially of fully selected. More...
 
SLfloat _edgeAngleDEG
 Edge crease angle in degrees between face normals (30 deg. default) More...
 
SLfloat _edgeWidth
 Line width for hard edge drawing. More...
 
SLCol4f _edgeColor
 Color for hard edge drawing. More...
 
SLfloat _vertexPosEpsilon
 Vertex position epsilon used in computeHardEdgesIndices. More...
 
SLbool _isVolume
 Flag for RT if mesh is a closed volume. More...
 
SLAccelStruct_accelStruct
 KD-tree or uniform grid. More...
 
SLbool _accelStructIsOutOfDate
 Flag if accel. struct needs update. More...
 
SLAnimSkeleton_skeleton
 The skeleton this mesh is bound to. More...
 
SLVMat4f _jointMatrices
 Joint matrix vector for this mesh. More...
 
SLbool _isCPUSkinned
 Flag if mesh has been skinned on CPU during update. More...
 
SLVVec3f_finalP
 Pointer to final vertex position vector. More...
 
SLVVec3f_finalN
 pointer to final vertex normal vector More...
 
- Protected Attributes inherited from SLObject
SLstring _name
 name of an object More...
 
SLstring _url
 uniform resource locator More...
 

Additional Inherited Members

- Static Public Member Functions inherited from SLMesh
static void calcTex3DMatrix (SLNode *node)
 
- Public Attributes inherited from SLMesh
SLVVec3f P
 Vector for vertex positions layout (location = 0) More...
 
SLVVec3f N
 Vector for vertex normals (opt.) layout (location = 1) More...
 
SLVVec2f UV [2]
 Array of 2 Vectors for tex. coords. (opt.) layout (location = 2) More...
 
SLVCol4f C
 Vector of vertex colors (opt.) layout (location = 4) More...
 
SLVVec4f T
 Vector of vertex tangents (opt.) layout (location = 5) More...
 
SLVVuchar Ji
 2D Vector of per vertex joint ids (opt.) layout (location = 6) More...
 
SLVVfloat Jw
 2D Vector of per vertex joint weights (opt.) layout (location = 7) More...
 
SLVVec3f skinnedP
 temp. vector for CPU skinned vertex positions More...
 
SLVVec3f skinnedN
 temp. vector for CPU skinned vertex normals More...
 
SLVushort I16
 Vector of vertex indices 16 bit. More...
 
SLVuint I32
 Vector of vertex indices 32 bit. More...
 
SLVuint IS32
 Vector of rectangle selected vertex indices 32 bit. More...
 
SLVushort IE16
 Vector of hard edges vertex indices 16 bit (see computeHardEdgesIndices) More...
 
SLVuint IE32
 Vector of hard edges vertex indices 32 bit (see computeHardEdgesIndices) More...
 
SLVec3f minP
 min. vertex in OS More...
 
SLVec3f maxP
 max. vertex in OS More...
 

Detailed Description

SLSphere creates a sphere mesh based on SLRevolver.

Definition at line 20 of file SLSpheric.h.

Constructor & Destructor Documentation

◆ SLSpheric()

SLSpheric::SLSpheric ( SLAssetManager assetMgr,
SLfloat  sphereRadius,
SLfloat  thetaStartDEG,
SLfloat  thetaEndDEG,
SLuint  stacks = 32,
SLuint  slices = 32,
SLstring  name = "spheric mesh",
SLMaterial mat = nullptr 
)

SLSpheric::SLSpheric ctor for spheric revolution object around the z-axis.

Definition at line 18 of file SLSpheric.cpp.

25  : SLRevolver(assetMgr, std::move(name))
26 {
27  assert(slices >= 3 && "Error: Not enough slices.");
28  assert(slices > 0 && "Error: Not enough stacks.");
29  assert(thetaStartDEG >= 0.0f && thetaStartDEG < 180.0f &&
30  "Error: Polar start angle < 0 or > 180");
31  assert(thetaEndDEG > 0.0f && thetaEndDEG <= 180.0f &&
32  "Error: Polar end angle < 0 or > 180");
33  assert(thetaStartDEG < thetaEndDEG &&
34  "Error: Polar start angle > end angle");
35 
36  _radius = sphereRadius;
37  _thetaStartDEG = thetaStartDEG;
38  _thetaEndDEG = thetaEndDEG;
39 
40  _stacks = stacks;
41  _slices = slices;
42  _smoothFirst = (thetaStartDEG == 0.0f);
43  _smoothLast = (thetaEndDEG == 180.0f);
44  _isVolume = (thetaStartDEG == 0.0f && thetaEndDEG == 180.0f);
45  _revAxis.set(0, 0, 1);
46  _revPoints.reserve(stacks + 1);
47 
48  SLfloat theta = -Utils::PI + thetaStartDEG * Utils::DEG2RAD;
49  SLfloat phi = 0;
50  SLfloat dTheta = (thetaEndDEG - thetaStartDEG) * Utils::DEG2RAD / stacks;
51 
52  for (SLuint i = 0; i <= stacks; ++i)
53  {
54  SLVec3f p;
55  p.fromSpherical(sphereRadius, theta, phi);
56  _revPoints.push_back(p);
57  theta += dTheta;
58  }
59 
60  buildMesh(mat);
61 }
float SLfloat
Definition: SL.h:173
unsigned int SLuint
Definition: SL.h:171
SLbool _isVolume
Flag for RT if mesh is a closed volume.
Definition: SLMesh.h:253
SLMaterial * mat() const
Definition: SLMesh.h:177
const SLstring & name() const
Definition: SLObject.h:38
SLbool _smoothLast
flag if the normal of the last point is eqaual to revAxis
Definition: SLRevolver.h:67
SLVec3f _revAxis
axis of revolution
Definition: SLRevolver.h:59
SLuint stacks()
Definition: SLRevolver.h:54
SLuint slices()
Definition: SLRevolver.h:55
SLbool _smoothFirst
flag if the normal of the first point is eqaual to -revAxis
Definition: SLRevolver.h:64
SLuint _slices
NO. of slices.
Definition: SLRevolver.h:61
void buildMesh(SLMaterial *mat=nullptr)
Definition: SLRevolver.cpp:43
SLVVec3f _revPoints
Array revolving points.
Definition: SLRevolver.h:58
SLRevolver(SLAssetManager *assetMgr, SLVVec3f revolvePoints, SLVec3f revolveAxis, SLuint slices=36, SLbool smoothFirst=false, SLbool smoothLast=false, SLstring name="revolver mesh", SLMaterial *mat=nullptr)
ctor for generic revolver mesh
Definition: SLRevolver.cpp:16
SLuint _stacks
No. of stacks (mostly used)
Definition: SLRevolver.h:60
SLfloat _thetaStartDEG
Polar start angle 0-180deg.
Definition: SLSpheric.h:37
SLfloat _thetaEndDEG
Polar end angle 1-180deg.
Definition: SLSpheric.h:38
SLfloat _radius
radius of the sphere
Definition: SLSpheric.h:36
void set(const T X, const T Y, const T Z)
Definition: SLVec3.h:59
void fromSpherical(T r, T theta, T phi)
Calculates the vector from spherical coords r, theta & phi in radians.
Definition: SLVec3.h:185
static const float DEG2RAD
Definition: Utils.h:239
static const float PI
Definition: Utils.h:237

Member Function Documentation

◆ radius()

SLfloat SLSpheric::radius ( )
inline

Definition at line 33 of file SLSpheric.h.

33 { return _radius; }

Member Data Documentation

◆ _radius

SLfloat SLSpheric::_radius
protected

radius of the sphere

Definition at line 36 of file SLSpheric.h.

◆ _thetaEndDEG

SLfloat SLSpheric::_thetaEndDEG
protected

Polar end angle 1-180deg.

Definition at line 38 of file SLSpheric.h.

◆ _thetaStartDEG

SLfloat SLSpheric::_thetaStartDEG
protected

Polar start angle 0-180deg.

Definition at line 37 of file SLSpheric.h.


The documentation for this class was generated from the following files: