Vp::SceneModel
Viewport entity representing a Model node in Core/GUI.
#include "Viewport/entity/nodes/SceneModel.h"
Inherits from Vp::TexturedObject, Vp::SceneSelectable, Vp::GameObject, Vp::Entity
Inherited by Vp::SceneCamera
Public Functions
Name | |
---|---|
SceneModel(Core::Mesh * mesh, PhongShader * shader) | |
SceneModel(std::string modelAlias, PhongShader * shader)<br>Load mesh using an alias. | |
std::string | getModel() |
virtual void | onSceneAdd(Scene & scene) override<br>Called when the entity is added to a scene. |
virtual void | onSceneRemove(Scene & scene) override<br>Called when the entity is removed from a scene. |
virtual void | render(const glm::mat4 & model, const glm::mat4 & view, const glm::mat4 & projection, const RenderContext & context) override<br>IMPLEMENTATION NOTE: Derived entity classes should expect a certain kind of shader and be able to directly static cast to it. |
void | setModel(std::string modelAlias) |
virtual void | update(Scene & scene) override |
Public Attributes
Name | |
---|---|
std::weak_ptr< ColoredObject > | m_axes <br>Visualisation of the basis vectors. |
std::string | m_modelAlias |
float | m_programOpacity <br>Runtime opacity factor. |
float | m_scale <br>Optional scaling factor of the model, eg. an implicit model transformation. |
bool | m_showAxes |
Additional inherited members
Public Functions inherited from Vp::TexturedObject
Name | |
---|---|
TexturedObject(Core::Mesh * mesh, PhongShader * shader) | |
virtual void | prepareRenderContext(RenderContext & context, const DisplayOptions & displayOptions) override |
Public Attributes inherited from Vp::TexturedObject
Name | |
---|---|
glm::vec3 | m_tint |
float | m_tintStrength |
Public Attributes inherited from Vp::SceneSelectable
Name | |
---|---|
Core::ID | m_guiNodeId <br>ID of the gui node object is representing. |
Public Functions inherited from Vp::GameObject
Name | |
---|---|
GameObject() =default<br>Creates an empty GameObject. | |
GameObject(Core::Mesh * mesh, ObjectShader * shader) | |
virtual void | dispose() override |
virtual void | prepareRenderContext(RenderContext & context, const DisplayOptions & displayOptions) override |
Public Attributes inherited from Vp::GameObject
Name | |
---|---|
Core::Mesh * | m_mesh |
float | m_opacity |
Public Classes inherited from Vp::Entity
Name | |
---|---|
struct | RenderContext |
Public Types inherited from Vp::Entity
Name | |
---|---|
enum class | RenderType { NORMAL, CUSTOM, SILHOUETTE} |
Public Functions inherited from Vp::Entity
Name | |
---|---|
Entity() | |
virtual | ~Entity() =default |
RenderContext | createRenderContext(const DisplayOptions & displayOptions) |
virtual void | dispose() =0 |
DisplayType | getDisplayType() const |
glm::vec3 | getHighlightColor() const |
bool | isHighlighted() const |
virtual void | prepareRenderContext(RenderContext & context, const DisplayOptions & displayOptions) =0 |
void | setDisplayType(DisplayType type) |
void | setHighlightColor(glm::vec3 highlightColor) |
void | setHighlighted(bool highlight) |
Public Attributes inherited from Vp::Entity
Name | |
---|---|
bool | m_backFaceCull |
unsigned int | m_explicitTransparencyOrder <br>Explicit order for ordered transparency. |
bool | m_highlight <br>Whether to paint this entity with an outline, can be used for selection or just highlighting. |
glm::vec3 | m_highlightColor |
bool | m_highlightUseDepth <br>Whether the highlight outline should respect the scene's depth buffer. |
bool | m_ignoreReferenceSpace <br>When true, the "global"/"reference space" model matrix passed to viewport drawing methods is ignored. |
bool | m_ignoreUserClipping <br>Whether to ignore user clip planes defined in DisplayOptions. |
glm::mat4 | m_lastModelMatrix <br>Potentially modifed model matrix last passed to the shader. |
glm::mat4 | m_modelMatrix <br>Model "world" transformation of the entity. |
glm::mat4 | m_modMatrix <br>Modification transformation, precedes any other transformations, modifies entity vertex data as if the modified data came directly from a source (model file). |
bool | m_opaque |
bool | m_selectable <br>Whether this entity should be written into the selection stencil buffer. |
int | m_selectionId <br>Id of the object, -1 if not assigned, for selection purposes. |
Shader * | m_shader |
bool | m_visible |
bool | m_wboit <br>Whether this entity should be rendered using order independent transparency, relevant if using a shader that supports wboit. |
int | m_wboitFunc <br>Index of the weight function to be used in wboit. |
Protected Attributes inherited from Vp::Entity
Name | |
---|---|
DisplayType | m_displayType |
Public Functions Documentation
function SceneModel
SceneModel(
Core::Mesh * mesh,
PhongShader * shader
)
SceneModel(
Core::Mesh * mesh,
PhongShader * shader
)
function SceneModel
SceneModel(
std::string modelAlias,
PhongShader * shader
)
SceneModel(
std::string modelAlias,
PhongShader * shader
)
Load mesh using an alias.
function getModel
std::string getModel()
std::string getModel()
function onSceneAdd
virtual void onSceneAdd(
Scene & scene
) override
virtual void onSceneAdd(
Scene & scene
) override
Called when the entity is added to a scene.
Parameters:
- scene Scene to which it has been added
Reimplements: Vp::Entity::onSceneAdd
function onSceneRemove
virtual void onSceneRemove(
Scene & scene
) override
virtual void onSceneRemove(
Scene & scene
) override
Called when the entity is removed from a scene.
Parameters:
- scene Scene from which it has been removed
Reimplements: Vp::Entity::onSceneRemove
function render
virtual void render(
const glm::mat4 & model,
const glm::mat4 & view,
const glm::mat4 & projection,
const RenderContext & context
) override
virtual void render(
const glm::mat4 & model,
const glm::mat4 & view,
const glm::mat4 & projection,
const RenderContext & context
) override
IMPLEMENTATION NOTE: Derived entity classes should expect a certain kind of shader and be able to directly static cast to it.
Parameters:
- model Implicit model matrix, multiplies the entity's model transform from the left.
- view View matrix
- projection Projection matrix
- context Additional per-instance rendering parameters generated by createRenderContext() or prepareRenderContext().
Reimplements: Vp::GameObject::render
Currently there is no error checking and wrongly passed shader type will CAUSE UNDEFINED BEHAVIOUR!
Using dynamic casts instead might be undesirable (slow) here (this might just be a premature optimalization) Generally the shader passed to this method is the m_shader of this entity. However we need functionality that allows us to change the shader temporarily (like for drawing silhouettes) Because of this the shader can also sometimes be something else, usually some derived type of the one the entity expects. I couldn't find a way to inform what kinds of shaders an entity is able to use in its render methods. The type of the shader must be the base Shader class and so some kind of casting must occur.
Another option could be to use some kind of a typeid/enum system that tells us what type a shader is (rather than use dynamic cast). But that approach ignores inheritance which we need and having multiple types of shaders and entity member variable seems very inflexible.
The true elegant solution probably doesn't involve inheritance at all and rather uses composition, together with an ECS or something. But it was decided to not dive into that realm and so we are stuck with this seemingly simple but not very flexible inheritance structure.
function setModel
void setModel(
std::string modelAlias
)
void setModel(
std::string modelAlias
)
function update
virtual void update(
Scene & scene
) override
virtual void update(
Scene & scene
) override
Reimplements: Vp::GameObject::update
Public Attributes Documentation
variable m_axes
std::weak_ptr< ColoredObject > m_axes;
std::weak_ptr< ColoredObject > m_axes;
Visualisation of the basis vectors.
variable m_modelAlias
std::string m_modelAlias {};
std::string m_modelAlias {};
variable m_programOpacity
float m_programOpacity {1.f};
float m_programOpacity {1.f};
Runtime opacity factor.
variable m_scale
float m_scale {1.f};
float m_scale {1.f};
Optional scaling factor of the model, eg. an implicit model transformation.
variable m_showAxes
bool m_showAxes {true};
bool m_showAxes {true};
Updated on 2025-05-31 at 12:55:31 +0000