SoQuadMesh - Online Linux Manual PageSection : 3
Updated : Mon Jan 25 2021
Source : Version 2.5.0
Note : Coin

NAMESoQuadMesh − The SoQuadMesh class is used to render and optimize a quadrilateral mesh​.

SYNOPSIS
#include <Inventor/nodes/SoQuadMesh​.h> Inherits SoNonIndexedShape​.

Public Member Functionsvirtual SoType getTypeId (void) const
SoQuadMesh (void)
virtual void GLRender (SoGLRenderAction *action)
virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)
virtual SbBool generateDefaultNormals (SoState *state, SoNormalBundle *nb)

Static Public Member Functionsstatic SoType getClassTypeId (void)
static void initClass (void)

Public AttributesSoSFInt32 verticesPerColumn
SoSFInt32 verticesPerRow

Protected Member Functionsvirtual const SoFieldData * getFieldData (void) const
virtual ~SoQuadMesh ()
virtual void generatePrimitives (SoAction *action)
virtual void computeBBox (SoAction *action, SbBox3f &box, SbVec3f ¢er)
virtual SbBool generateDefaultNormals (SoState *, SoNormalCache *)

Static Protected Member Functionsstatic const SoFieldData ** getFieldDataPtr (void)

Additional Inherited Members

Detailed DescriptionThe SoQuadMesh class is used to render and optimize a quadrilateral mesh​. This node uses the coordinates in order, either from the state or from the SoQuadMesh::vertexProperty node, to construct a quadrilateral mesh​. The quads are generated in row major order, using the two fields SoQuadMesh::verticesPerColumn and SoQuadMesh::verticesPerRow to specify the mesh​. E​.g​. if SoQuadMesh::verticesPerColumn is 3 and SoQuadMesh::verticesPerRow is 2, two quads will be generated with the first one using (in order) coordinates 0, 1, 3 and 2, the second one using coordinates 2, 3, 5 and 4 (you get three rows of vertices; the first row uses vertices 0 and 1, the second row 2 and 3, and the third row 4 and 5)​. Here's a quick and simple usage example code snippet: // Vertices for the Quad mesh​. static float vertices[25][3] = { // Row 1 {-11, 0, 1}, {0, 11, 1}, {11, 0, 1}, {0, -11, 1}, {-11, 0, 1}, // Row 2 {-9, 0, 1}, {0, 9, 1}, {9, 0, 1}, {0, -9, 1}, {-9, 0, 1}, // Row 3 {-9, 0, -1}, {0, 9, -1}, {9, 0, -1}, {0, -9, -1}, {-9, 0, -1}, // Row 4 {-11, 0, -1}, {0, 11, -1}, {11, 0, -1}, {0, -11, -1}, {-11, 0, -1}, // Row 5 {-11, 0, 1}, {0, 11, 1}, {11, 0, 1}, {0, -11, 1}, {-11, 0, 1} }; // This function generate an object by using the SoQuadMesh node // Return: // SoSeparator * static SoSeparator * quadMesh(void) { SoSeparator * qm = new SoSeparator; // Define coordinates SoCoordinate3 * coords = new SoCoordinate3; coords->point​.setValues(0, 30, vertices); qm->addChild(coords); // QuadMesh SoQuadMesh * mesh = new SoQuadMesh; mesh->verticesPerRow = 5; mesh->verticesPerColumn = 5; qm->addChild(mesh); return qm; }The quadmesh geometry resulting from this code looks like this:
Here is another example, this time making a 2x2 grid, with a texture: #Inventor V2.1 ascii Separator { Complexity { textureQuality 0.01 } Texture2 { image 2 2 4 0xff0000ff 0x00ff00ff 0xffff00ff 0xff00ffff } Coordinate3 { point [ 0 2 0, 1 2 0, 2 2 0, 0 1 0, 1 1 0, 2 1 0, 0 0 0, 1 0 0, 2 0 0 ] } QuadMesh { verticesPerRow 3 verticesPerColumn 3 } }For SoQuadMesh, normals and materials can be bound PER_PART (per row), PER_FACE, PER_VERTEX and OVERALL​. The default material binding is OVERALL​. The default normal binding is PER_VERTEX​. A note about SoQuadMesh shading: the quads in the mesh are just passed on to OpenGL's GL_QUAD primitive rendering​. Under certain circumstances, this can lead to artifacts in how your meshes are shaded​. This is an inherent problem with drawing quads in meshes​. There is a work-around solution for the above mentioned problem that can be applied with Coin: by setting the global environment variable COIN_QUADMESH_PRECISE_LIGHTING to '1', the quads will be broken up in triangles before rendered, and shading will likely look much better​. Be aware that this technique causes rendering of the SoQuadMesh to slow down by an approximate factor of 6​. The 'precise lighting' technique is currently limited to work only when SoQuadMesh rendering is parameterized with 3D coordinates, a materialbinding that is not per vertex, and if texture mapping is done is must be without using any of the SoTextureCoordinateFunction subclass nodes​. FILE FORMAT/DEFAULTS: QuadMesh { vertexProperty NULL startIndex 0 verticesPerColumn 1 verticesPerRow 1 } See also SoTriangleStripSet SoIndexedTriangleStripSet

Constructor & Destructor Documentation

SoQuadMesh::SoQuadMesh (void)Constructor​. References verticesPerColumn, and verticesPerRow​.

SoQuadMesh::~SoQuadMesh () [protected], [virtual]Destructor​.

Member Function Documentation

SoType SoQuadMesh::getTypeId (void) const [virtual]Returns the type identification of an object derived from a class inheriting SoBase​. This is used for run-time type checking and 'downward' casting​. Usage example: void foo(SoNode * node) { if (node->getTypeId() == SoFile::getClassTypeId()) { SoFile * filenode = (SoFile *)node; // safe downward cast, knows the type } else if (node->getTypeId()​.isOfType(SoGroup::getClassTypeId())) { SoGroup * group = (SoGroup *)node; // safe downward cast, knows the type } }For application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or others: this method needs to be overridden in all subclasses​. This is typically done as part of setting up the full type system for extension classes, which is usually accomplished by using the pre-defined macros available through for instance Inventor/nodes/SoSubNode​.h (SO_NODE_INIT_CLASS and SO_NODE_CONSTRUCTOR for node classes), Inventor/engines/SoSubEngine​.h (for engine classes) and so on​. For more information on writing Coin extensions, see the class documentation of the toplevel superclasses for the various class groups​. Reimplemented from SoNonIndexedShape​.

const SoFieldData * SoQuadMesh::getFieldData (void) const [protected], [virtual]Returns a pointer to the class-wide field data storage object for this instance​. If no fields are present, returns NULL​. Reimplemented from SoNonIndexedShape​.

void SoQuadMesh::GLRender (SoGLRenderAction * action) [virtual]Action method for the SoGLRenderAction​. This is called during rendering traversals​. Nodes influencing the rendering state in any way or who wants to throw geometry primitives at OpenGL overrides this method​. Reimplemented from SoShape​. References SoVertexShape::generateAndReadLockNormalCache(), SoAction::getState(), SoVertexShape::getVertexData(), SoNode::GLRender(), SoState::pop(), SoDebugError::postWarning(), SoState::push(), SoVertexShape::readUnlockNormalCache(), SoVertexShape::shouldGLRender(), SoNonIndexedShape::startIndex, SoVertexShape::vertexProperty, verticesPerColumn, and verticesPerRow​.

void SoQuadMesh::getPrimitiveCount (SoGetPrimitiveCountAction * action) [virtual]Action method for the SoGetPrimitiveCountAction​. Calculates the number of triangle, line segment and point primitives for the node and adds these to the counters of the action​. Nodes influencing how geometry nodes calculates their primitive count also overrides this method to change the relevant state variables​. Reimplemented from SoShape​. References SoGetPrimitiveCountAction::addNumTriangles(), SoShape::shouldPrimitiveCount(), and verticesPerRow​.

SbBool SoQuadMesh::generateDefaultNormals (SoState * state, SoNormalBundle * bundle) [virtual]This API member is considered internal to the library, as it is not likely to be of interest to the application programmer​.


 Subclasses should override this method to generate default normals using the SoNormalBundle class​.
TRUE should be returned if normals were generated, FALSE otherwise​. Default method returns FALSE​. This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2​.1 API​.
Reimplemented from SoVertexShape​.

void SoQuadMesh::generatePrimitives (SoAction * action) [protected], [virtual]The method implements action behavior for shape nodes for SoCallbackAction​. It is invoked from SoShape::callback()​. (Subclasses should not override SoNode::callback()​.) The subclass implementations uses the convenience methods SoShape::beginShape(), SoShape::shapeVertex(), and SoShape::endShape(), with SoDetail instances, to pass the primitives making up the shape back to the caller​. Implements SoShape​. References SoShape::beginShape(), SoNode::doAction(), SoShape::endShape(), SoVertexShape::generateAndReadLockNormalCache(), SoAction::getState(), SoVertexShape::getVertexData(), SoFaceDetail::incFaceIndex(), SoFaceDetail::incPartIndex(), SoState::pop(), SoState::push(), SoVertexShape::readUnlockNormalCache(), SoPointDetail::setCoordinateIndex(), SoPrimitiveVertex::setDetail(), SoFaceDetail::setFaceIndex(), SoPointDetail::setMaterialIndex(), SoPrimitiveVertex::setMaterialIndex(), SoPrimitiveVertex::setNormal(), SoPointDetail::setNormalIndex(), SoPrimitiveVertex::setPoint(), SoPointDetail::setTextureCoordIndex(), SoPrimitiveVertex::setTextureCoords(), SoShape::shapeVertex(), SoNonIndexedShape::startIndex, SoVertexShape::vertexProperty, verticesPerColumn, and verticesPerRow​.

void SoQuadMesh::computeBBox (SoAction * action, SbBox3f & box, SbVec3f & center) [protected], [virtual]Implemented by SoShape subclasses to let the SoShape superclass know the exact size and weighted center point of the shape's bounding box​. The bounding box and center point should be calculated and returned in the local coordinate system​. The method implements action behavior for shape nodes for SoGetBoundingBoxAction​. It is invoked from SoShape::getBoundingBox()​. (Subclasses should not override SoNode::getBoundingBox()​.) The box parameter sent in is guaranteed to be an empty box, while center is undefined upon function entry​. Implements SoShape​. References SoNonIndexedShape::computeCoordBBox(), and verticesPerRow​.

SbBool SoQuadMesh::generateDefaultNormals (SoState * state, SoNormalCache * cache) [protected], [virtual]This API member is considered internal to the library, as it is not likely to be of interest to the application programmer​.


 Subclasses should override this method to generate default normals using the SoNormalCache class​. This is more effective than using SoNormalGenerator​. Return
TRUE if normals were generated, FALSE otherwise​. Default method just returns FALSE​. This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2​.1 API​.
Reimplemented from SoVertexShape​. References SoNonIndexedShape::startIndex, verticesPerColumn, and verticesPerRow​.

Member Data Documentation

SoSFInt32 SoQuadMesh::verticesPerColumnSpecifies to number of vertices in each column​. Referenced by generateDefaultNormals(), generatePrimitives(), GLRender(), and SoQuadMesh()​.

SoSFInt32 SoQuadMesh::verticesPerRowSpecifies the number of vertices in each row​. Referenced by computeBBox(), generateDefaultNormals(), generatePrimitives(), getPrimitiveCount(), GLRender(), and SoQuadMesh()​.

AuthorGenerated automatically by Doxygen for Coin from the source code​.
0
Johanes Gumabo
Data Size   :   44,545 byte
man-SoQuadMesh.3coin2Build   :   2024-12-05, 20:55   :  
Visitor Screen   :   x
Visitor Counter ( page / site )   :   2 / 180,124
Visitor ID   :     :  
Visitor IP   :   3.135.184.124   :  
Visitor Provider   :   AMAZON-02   :  
Provider Position ( lat x lon )   :   39.962500 x -83.006100   :   x
Provider Accuracy Radius ( km )   :   1000   :  
Provider City   :   Columbus   :  
Provider Province   :   Ohio ,   :   ,
Provider Country   :   United States   :  
Provider Continent   :   North America   :  
Visitor Recorder   :   Version   :  
Visitor Recorder   :   Library   :  
Online Linux Manual Page   :   Version   :   Online Linux Manual Page - Fedora.40 - march=x86-64 - mtune=generic - 24.12.05
Online Linux Manual Page   :   Library   :   lib_c - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Online Linux Manual Page   :   Library   :   lib_m - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Data Base   :   Version   :   Online Linux Manual Page Database - 24.04.13 - march=x86-64 - mtune=generic - fedora-38
Data Base   :   Library   :   lib_c - 23.02.07 - march=x86-64 - mtune=generic - fedora.36

Very long time ago, I have the best tutor, Wenzel Svojanovsky . If someone knows the email address of Wenzel Svojanovsky , please send an email to johanes_gumabo@yahoo.co.id .
If error, please print screen and send to johanes_gumabo@yahoo.co.id
Under development. Support me via PayPal.