coin250(3)

πŸ“¦ version 2.5.0, in fedora 43, fedora 44

🌸 NAME 🌸

coin250 β€” New Features in Coin v2.5.0

okay bestie, so this is the coin250(3) page from the Library Functions Manual, and it's a lil tour of everything new in Coin v2.5.0, grouped up by feature category. it's a brief summary, not the whole saga, but it's a good summary. πŸ’…


🌍 Geographical Data Support 🌍

The Geographic Data Support nodes are partly based on GeoVRML (http://www.geovrml.org/) and partly based on our own UTM-nodes, which live over in the SmallChange library.

What do they even do? They let you make, like, globe-spanning models that you can navigate around in without hitting float precision problems β€” aka "the shakes" 😭. Real talk though: your application code has to help out a lil. This is not a fully automatic solution, no cap.

New nodes, get into it:

  • SoGeoOrigin
  • SoGeoLocation
  • SoGeoSeparator
  • SoGeoCoordinate

And that's not all β€” SoCamera and its derived nodes got updated to support the SoGeoOrigin node. πŸŽ€

Ngl the coordinate system support in these nodes is currently a bit lacking (only a few systems/zones are supported), but it'll improve over time. Extending it shouldn't need API-changes, so patchlevel releases would be enough to add more coordinate systems. slay.

The VRML2 counterparts of the above nodes β€” which would be a subpart of implementing the GeoVRML extension β€” are not yet in development, but they might show up for the next major release, since a big part of the implementation will be shared. πŸ‘€

⚠️ bestie, heads up: these SoGeo*-nodes make the UTM*-nodes in the SmallChange library obsolete (for anyone who uses those), so support for them will eventually be deprecated and removed. They won't get removed over night, but if you're new here: avoid starting to use the UTM*-nodes at all cost, so you don't have to waste time on a port down the line. periodt.

✨ Generic GLSL Shader Support ✨

Shader support is implemented through a set of new shader nodes, more or less compatible with the corresponding TGS extensions. Beyond GLSL, Coin also supports ARB shaders and Cg shaders (if the Cg library is installed). But fr fr, we only recommend using the shader language GLSL and that's where our focus lives. πŸ’…

New nodes:

  • SoShaderProgram
  • SoVertexShader
  • SoFragmentShader
  • SoGeometryShader

Also go peek at the "Shaders in Coin" page for more info. πŸ¦‹


πŸŒ‘ Generic Shadow Rendering Functionality πŸŒ‘

Support for rendering shadows got added to Coin through a set of shader-based nodes. The technique used is the Variance Shadow Maps technique (http://www.punkuser.net/vsm/). iconic.

New nodes:

  • SoShadowGroup
  • SoShadowCulling
  • SoShadowStyle

πŸš€ Vertex Buffer Object (VBO) Usage πŸš€

A LOT of nodes have had their rendering code optimized for VBO usage, and it's giving great performance increases πŸ”₯. BUT β€” and this is the part that matters β€” it is not universally enabled. You have to organize the scene graphs in specific ways for VBOs to actually get used.

The detailed description is on the VBO Rendering in Coin page.

Relevant classes:

  • SoVertexProperty
  • SoReorganizeAction

πŸ“¦ Expanded Sb* Class Collection πŸ“¦

The set of Sb* classes in Coin has been expanded greatly, most notably a whole skew of SbVec and SbBox classes. Why tho? History lesson πŸ“–: these classes used to just get added as needed, one by one, which made the stable branch of Coin and the development branch of Coin diverge and become more and more incompatible as time went by 😭. Also, extension nodes were created in peripheral libraries that used these new classes from the Coin development branch, and consequently couldn't be built against the stable branch of Coin. So with this preemptive class set expansion, the hope is that the Coin stable branch and the Coin development branch stay closer in sync over a longer period, and that the incompatibility divergence happens around major new feature sets instead of around minor details. big brain move honestly.

New Sb*-classes β€” and yes, the source really does drop a \break in there, so we're keeping it exactly:

\break SbBox2i32, SbBox3i32, SbBox3d, SbVec2b, SbVec2ub, SbVec2us, SbVec2i32, SbVec2ui32, SbVec3b, SbVec3ub, SbVec3us, SbVec3i32, SbVec3ui32, SbVec4b, SbVec4ub, SbVec4s, SbVec4us, SbVec4i32, SbVec4ui32, SbXfBox3d
πŸ’‘ note: you can also find a good deal of these classes in TGS Inventor, so this was also a TGS compatibility move. two birds 🐦

πŸŽ€ Expanded Field Class Collection πŸŽ€

Exact same reasoning as for the Sb*-classes goes for the field classes, bestie. Same energy, different class family.

New field classes:

\break SoSFBox2s, SoSFBox2i32, SoSFBox2d, SoSFBox2d, SoSFBox3i32, SoSFBox3d, SoSFColorRGBA, SoSFDouble, SoSFVec2b, SoSFVec2i32, SoSFVec2d, SoSFVec3b, SoSFVec3i32, SoSFVec4b, SoSFVec4ub, SoSFVec4s, SoSFVec4us, SoSFVec4i32, SoSFVec4ui32, SoSFVec4d, SoMFColorRGBA, SoMFDouble, SoMFVec2b, SoMFVec2s, SoMFVec2i32, SoMFVec2d, SoMFVec3b, SoMFVec3s, SoMFVec3i32, SoMFVec4b, SoMFVec4ub, SoMFVec4s, SoMFVec4us, SoMFVec4i32, SoMFVec4ui32, SoMFVec4d

(and yes, SoSFBox2d is in there twice. we are not fixing it, we are preserving it. πŸ’…)


πŸ“· SoFrustumCamera node πŸ“·

This node got added so you can set up a custom camera with full control over the view volume. SoFrustumCamera is basically a mapping of the OpenGL glFrustum() method.

Typical use of SoFrustumCamera is in a CAVE or MultiPipe environment, where it's often necessary to set up cameras based on the configuration of the different displays. very demure, very mindful. 🫢


πŸ“ Miscellaneous πŸ“

Below follows a non-exhaustive list of other, more minor, tweaks and tidbits.

🐚 SoSearchAction on SoFile nodes 🐚

To facilitate control over whether an SoFile node should traverse its children during an SoSearchAction traversal, two static methods have been added to SoFile.

New functions:

  • SoFile::setSearchOK() [static]
  • SoFile::getSearchOK() [static]

🧚 SbTypeInfo<T> template type information library 🧚

For those who write generic code using C++ templates, a template type information library has been added for the primitive Coin-types. So you can use type relations for populating a template instead of needing template parameters for all changing types of the template, or you can write generic code on type attributes like the number of dimensions of an SbVec class. SbTypeInfo<T> can be found in Inventor/SbTypeInfo.h. πŸ’œ

πŸ’» Visual Studio Projects πŸ’»

The Visual Studio projects have been split into projects for separately building, installing, uninstalling the Coin SDK, and document generation. This was done primarily to be able to build without automatically performing the installation procedure at the same time, but also to offer other supplementary targets later like the doc-generation project... πŸ› οΈ

New features for Coin v2.4.0 are here. (the original links out for that one β€” just so you know it's there 🫑)


aaaand that's the whole page! πŸ’– this was Coin, Version 2.5.0, and the page itself is coin250(3). mwah, go build something cute. πŸŽ€πŸŒˆ

πŸ“¦ where this page comes from