Vp::ColoredObject
#include "Viewport/entity/ColoredObject.h"
Inherits from Vp::GameObject, Vp::Entity
Inherited by Vp::FrustumObject
Public Functions
Name | |
---|---|
ColoredObject(Core::Mesh * mesh, ColorShader * shader) | |
const glm::vec3 & | getColor() const |
virtual void | render(Shader * shader, glm::mat4 view, glm::mat4 projection, bool silhouette) override<br>IMPLEMENTATION NOTE: Derived entity classes should expect a certain kind of shader and be able to directly static cast to it. |
void | setColor(const glm::vec3 & color) |
void | setColor(const glm::vec3 * color) |
Public Attributes
Name | |
---|---|
glm::vec3 | m_singleColor |
bool | m_useSingleColor |
Additional inherited members
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 | update(Scene & scene) override |
Public Attributes inherited from Vp::GameObject
Name | |
---|---|
Core::Mesh * | m_mesh |
float | m_opacity |
Public Functions inherited from Vp::Entity
Name | |
---|---|
Entity() | |
virtual | ~Entity() =default |
virtual void | dispose() =0 |
virtual DisplayType | getDisplayType() const |
virtual glm::vec3 | getHighlightColor() const |
virtual bool | isHighlighted() const |
virtual void | onSceneAdd(Scene & scene)<br>Called when the entity is added to a scene. |
virtual void | onSceneRemove(Scene & scene)<br>Called when the entity is removed from a scene. |
virtual void | setDisplayType(DisplayType type) |
virtual void | setHighlightColor(glm::vec3 highlightColor) |
virtual void | setHighlighted(bool highlight) |
virtual void | update(Scene & scene) =0 |
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. |
glm::mat4 | m_modelMatrix <br>Model transformation of the entity. |
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 ColoredObject
ColoredObject(
Core::Mesh * mesh,
ColorShader * shader
)
ColoredObject(
Core::Mesh * mesh,
ColorShader * shader
)
function getColor
const glm::vec3 & getColor() const
const glm::vec3 & getColor() const
function render
virtual void render(
Shader * shader,
glm::mat4 view,
glm::mat4 projection,
bool silhouette
) override
virtual void render(
Shader * shader,
glm::mat4 view,
glm::mat4 projection,
bool silhouette
) override
IMPLEMENTATION NOTE: Derived entity classes should expect a certain kind of shader and be able to directly static cast to it.
Reimplements: Vp::Entity::render
Reimplemented by: Vp::FrustumObject::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 setColor
void setColor(
const glm::vec3 & color
)
void setColor(
const glm::vec3 & color
)
function setColor
void setColor(
const glm::vec3 * color
)
void setColor(
const glm::vec3 * color
)
Public Attributes Documentation
variable m_singleColor
glm::vec3 m_singleColor {1.0f, 0.0f, 1.0f};
glm::vec3 m_singleColor {1.0f, 0.0f, 1.0f};
variable m_useSingleColor
bool m_useSingleColor {false};
bool m_useSingleColor {false};
Updated on 2024-11-06 at 20:16:53 +0000