First try to support colorization texture mask
This commit is contained in:
parent
1463cf9344
commit
53374176ad
@ -1,6 +1,7 @@
|
|||||||
#ifndef Use_Bindless_Texture
|
#ifndef Use_Bindless_Texture
|
||||||
uniform sampler2D Albedo;
|
uniform sampler2D Albedo;
|
||||||
uniform sampler2D SpecMap;
|
uniform sampler2D SpecMap;
|
||||||
|
uniform sampler2D colorization_mask;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Use_Bindless_Texture
|
#ifdef Use_Bindless_Texture
|
||||||
@ -31,13 +32,15 @@ void main(void)
|
|||||||
vec4 col = texture(Albedo, uv);
|
vec4 col = texture(Albedo, uv);
|
||||||
float specmap = texture(SpecMap, uv).g;
|
float specmap = texture(SpecMap, uv).g;
|
||||||
float emitmap = texture(SpecMap, uv).b;
|
float emitmap = texture(SpecMap, uv).b;
|
||||||
|
float mask = texture(colorization_mask, uv).a;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (color_change.x > 0.0)
|
if (color_change.x > 0.0)
|
||||||
{
|
{
|
||||||
vec3 old_hsv = rgbToHsv(col.rgb);
|
vec3 old_hsv = rgbToHsv(col.rgb);
|
||||||
old_hsv.y = max(old_hsv.y, color_change.y);
|
float mask_step = step(mask, 0.5);
|
||||||
vec3 new_color = hsvToRgb(vec3(color_change.x, old_hsv.y, old_hsv.z));
|
vec2 new_xy = mix(vec2(old_hsv.x, old_hsv.y), vec2(color_change.x, max(old_hsv.y, color_change.y)), vec2(mask_step, mask_step));
|
||||||
|
vec3 new_color = hsvToRgb(vec3(new_xy.x, new_xy.y, old_hsv.z));
|
||||||
col = vec4(new_color.r, new_color.g, new_color.b, col.a);
|
col = vec4(new_color.r, new_color.g, new_color.b, col.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ layout(bindless_sampler) uniform sampler2D SpecMap;
|
|||||||
#else
|
#else
|
||||||
uniform sampler2D Albedo;
|
uniform sampler2D Albedo;
|
||||||
uniform sampler2D SpecMap;
|
uniform sampler2D SpecMap;
|
||||||
|
uniform sampler2D colorization_mask;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform vec2 color_change;
|
uniform vec2 color_change;
|
||||||
@ -25,13 +26,15 @@ void main(void)
|
|||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
vec4 col = texture(Albedo, uv);
|
vec4 col = texture(Albedo, uv);
|
||||||
|
float mask = texture(colorization_mask, uv).a;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (color_change.x > 0.0)
|
if (color_change.x > 0.0)
|
||||||
{
|
{
|
||||||
vec3 old_hsv = rgbToHsv(col.rgb);
|
vec3 old_hsv = rgbToHsv(col.rgb);
|
||||||
old_hsv.y = max(old_hsv.y, color_change.y);
|
float mask_step = step(mask, 0.5);
|
||||||
vec3 new_color = hsvToRgb(vec3(color_change.x, old_hsv.y, old_hsv.z));
|
vec2 new_xy = mix(vec2(old_hsv.x, old_hsv.y), vec2(color_change.x, max(old_hsv.y, color_change.y)), vec2(mask_step, mask_step));
|
||||||
|
vec3 new_color = hsvToRgb(vec3(new_xy.x, new_xy.y, old_hsv.z));
|
||||||
col = vec4(new_color.r, new_color.g, new_color.b, col.a);
|
col = vec4(new_color.r, new_color.g, new_color.b, col.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,6 +145,7 @@ Material::Material(const XMLNode *node, bool deprecated)
|
|||||||
node->get("fog", &m_fog );
|
node->get("fog", &m_fog );
|
||||||
|
|
||||||
node->get("mask", &m_mask );
|
node->get("mask", &m_mask );
|
||||||
|
node->get("colorization-mask", &m_colorization_mask );
|
||||||
node->get("gloss-map", &m_gloss_map );
|
node->get("gloss-map", &m_gloss_map );
|
||||||
node->get("water-splash", &m_water_splash );
|
node->get("water-splash", &m_water_splash );
|
||||||
node->get("jump", &m_is_jump_texture );
|
node->get("jump", &m_is_jump_texture );
|
||||||
@ -438,6 +439,7 @@ void Material::init()
|
|||||||
m_disable_z_write = false;
|
m_disable_z_write = false;
|
||||||
m_colorizable = false;
|
m_colorizable = false;
|
||||||
m_colorization_factor = 0.0f;
|
m_colorization_factor = 0.0f;
|
||||||
|
m_colorization_mask = "";
|
||||||
m_water_shader_speed_1 = 6.6667f;
|
m_water_shader_speed_1 = 6.6667f;
|
||||||
m_water_shader_speed_2 = 4.0f;
|
m_water_shader_speed_2 = 4.0f;
|
||||||
m_fog = true;
|
m_fog = true;
|
||||||
@ -724,6 +726,18 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m
|
|||||||
{
|
{
|
||||||
glossytex = getUnicolorTexture(SColor(0, 0, 0, 0));
|
glossytex = getUnicolorTexture(SColor(0, 0, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!m->getTexture(7))
|
||||||
|
{
|
||||||
|
// Only set colorization mask if not set
|
||||||
|
ITexture *colorization_mask_tex = getUnicolorTexture(SColor(0, 0, 0, 0));
|
||||||
|
if (m_colorization_mask.size() > 0)
|
||||||
|
{
|
||||||
|
colorization_mask_tex = irr_driver->getTexture(m_colorization_mask);
|
||||||
|
}
|
||||||
|
m->setTexture(7, colorization_mask_tex);
|
||||||
|
}
|
||||||
|
|
||||||
switch (m_shader_type)
|
switch (m_shader_type)
|
||||||
{
|
{
|
||||||
case SHADERTYPE_SOLID_UNLIT:
|
case SHADERTYPE_SOLID_UNLIT:
|
||||||
@ -974,7 +988,7 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m
|
|||||||
if (race_manager->getReverseTrack() &&
|
if (race_manager->getReverseTrack() &&
|
||||||
m_mirror_axis_when_reverse != ' ')
|
m_mirror_axis_when_reverse != ' ')
|
||||||
{
|
{
|
||||||
irr::video::S3DVertex* mbVertices = (video::S3DVertex*)mb->getVertices();
|
//irr::video::S3DVertex* mbVertices = (video::S3DVertex*)mb->getVertices();
|
||||||
for (unsigned int i = 0; i < mb->getVertexCount(); i++)
|
for (unsigned int i = 0; i < mb->getVertexCount(); i++)
|
||||||
{
|
{
|
||||||
core::vector2df &tc = mb->getTCoords(i);
|
core::vector2df &tc = mb->getTCoords(i);
|
||||||
|
@ -233,6 +233,8 @@ private:
|
|||||||
|
|
||||||
std::string m_mask;
|
std::string m_mask;
|
||||||
|
|
||||||
|
std::string m_colorization_mask;
|
||||||
|
|
||||||
/** If m_splatting is true, indicates the first splatting texture */
|
/** If m_splatting is true, indicates the first splatting texture */
|
||||||
std::string m_splatting_texture_1;
|
std::string m_splatting_texture_1;
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ public:
|
|||||||
}; // ObjectRefPass2Shader
|
}; // ObjectRefPass2Shader
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
class InstancedObjectPass2Shader : public TextureShader<InstancedObjectPass2Shader, 5>
|
class InstancedObjectPass2Shader : public TextureShader<InstancedObjectPass2Shader, 6>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
GLint m_color_change_location;
|
GLint m_color_change_location;
|
||||||
@ -151,7 +151,8 @@ public:
|
|||||||
1, "SpecularMap", ST_NEAREST_FILTERED,
|
1, "SpecularMap", ST_NEAREST_FILTERED,
|
||||||
2, "SSAO", ST_BILINEAR_FILTERED,
|
2, "SSAO", ST_BILINEAR_FILTERED,
|
||||||
3, "Albedo", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
3, "Albedo", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||||
4, "SpecMap", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
4, "SpecMap", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||||
|
5, "colorization_mask", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||||
} // InstancedObjectPass2Shader
|
} // InstancedObjectPass2Shader
|
||||||
|
|
||||||
virtual bool changeableColor(float hue = 0.0f, float min_sat = 0.0f) const OVERRIDE
|
virtual bool changeableColor(float hue = 0.0f, float min_sat = 0.0f) const OVERRIDE
|
||||||
@ -542,15 +543,15 @@ struct DefaultMaterial
|
|||||||
= Material::SHADERTYPE_SOLID;
|
= Material::SHADERTYPE_SOLID;
|
||||||
static const enum InstanceType Instance = InstanceTypeDualTex;
|
static const enum InstanceType Instance = InstanceTypeDualTex;
|
||||||
static const STK::Tuple<size_t> FirstPassTextures;
|
static const STK::Tuple<size_t> FirstPassTextures;
|
||||||
static const STK::Tuple<size_t, size_t> SecondPassTextures;
|
static const STK::Tuple<size_t, size_t, size_t> SecondPassTextures;
|
||||||
static const STK::Tuple<> ShadowTextures;
|
static const STK::Tuple<> ShadowTextures;
|
||||||
static const STK::Tuple<size_t> RSMTextures;
|
static const STK::Tuple<size_t> RSMTextures;
|
||||||
}; // struct DefaultMaterial
|
}; // struct DefaultMaterial
|
||||||
|
|
||||||
const STK::Tuple<size_t> DefaultMaterial::FirstPassTextures
|
const STK::Tuple<size_t> DefaultMaterial::FirstPassTextures
|
||||||
= STK::Tuple<size_t>(1);
|
= STK::Tuple<size_t>(1);
|
||||||
const STK::Tuple<size_t, size_t> DefaultMaterial::SecondPassTextures
|
const STK::Tuple<size_t, size_t, size_t> DefaultMaterial::SecondPassTextures
|
||||||
= STK::Tuple<size_t, size_t>(0, 1);
|
= STK::Tuple<size_t, size_t, size_t>(0, 1, 7);
|
||||||
const STK::Tuple<> DefaultMaterial::ShadowTextures;
|
const STK::Tuple<> DefaultMaterial::ShadowTextures;
|
||||||
const STK::Tuple<size_t> DefaultMaterial::RSMTextures = STK::Tuple<size_t>(0);
|
const STK::Tuple<size_t> DefaultMaterial::RSMTextures = STK::Tuple<size_t>(0);
|
||||||
|
|
||||||
@ -866,7 +867,7 @@ struct NormalMat
|
|||||||
= Material::SHADERTYPE_NORMAL_MAP;
|
= Material::SHADERTYPE_NORMAL_MAP;
|
||||||
static const enum InstanceType Instance = InstanceTypeThreeTex;
|
static const enum InstanceType Instance = InstanceTypeThreeTex;
|
||||||
static const STK::Tuple<size_t, size_t> FirstPassTextures;
|
static const STK::Tuple<size_t, size_t> FirstPassTextures;
|
||||||
static const STK::Tuple<size_t, size_t> SecondPassTextures;
|
static const STK::Tuple<size_t, size_t, size_t> SecondPassTextures;
|
||||||
static const STK::Tuple<> ShadowTextures;
|
static const STK::Tuple<> ShadowTextures;
|
||||||
static const STK::Tuple<size_t> RSMTextures;
|
static const STK::Tuple<size_t> RSMTextures;
|
||||||
}; // NormalMat
|
}; // NormalMat
|
||||||
@ -874,8 +875,8 @@ struct NormalMat
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
const STK::Tuple<size_t, size_t> NormalMat::FirstPassTextures
|
const STK::Tuple<size_t, size_t> NormalMat::FirstPassTextures
|
||||||
= STK::Tuple<size_t, size_t>(2, 1);
|
= STK::Tuple<size_t, size_t>(2, 1);
|
||||||
const STK::Tuple<size_t, size_t> NormalMat::SecondPassTextures
|
const STK::Tuple<size_t, size_t, size_t> NormalMat::SecondPassTextures
|
||||||
= STK::Tuple<size_t, size_t>(0, 1);
|
= STK::Tuple<size_t, size_t, size_t>(0, 1, 7);
|
||||||
const STK::Tuple<> NormalMat::ShadowTextures;
|
const STK::Tuple<> NormalMat::ShadowTextures;
|
||||||
const STK::Tuple<size_t> NormalMat::RSMTextures = STK::Tuple<size_t>(0);
|
const STK::Tuple<size_t> NormalMat::RSMTextures = STK::Tuple<size_t>(0);
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
#ifndef HEADER_RENDER_INFO_HPP
|
#ifndef HEADER_RENDER_INFO_HPP
|
||||||
#define HEADER_RENDER_INFO_HPP
|
#define HEADER_RENDER_INFO_HPP
|
||||||
|
|
||||||
|
#include "utils/leak_check.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -49,6 +51,8 @@ private:
|
|||||||
std::vector<int> m_colorizable_parts;
|
std::vector<int> m_colorizable_parts;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
LEAK_CHECK();
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
RenderInfo(float hue = 0.0f, bool transparent = false);
|
RenderInfo(float hue = 0.0f, bool transparent = false);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
~RenderInfo() {}
|
~RenderInfo() {}
|
||||||
|
@ -348,7 +348,8 @@ Shaders::ObjectPass2Shader::ObjectPass2Shader()
|
|||||||
1, "SpecularMap", ST_NEAREST_FILTERED,
|
1, "SpecularMap", ST_NEAREST_FILTERED,
|
||||||
2, "SSAO", ST_BILINEAR_FILTERED,
|
2, "SSAO", ST_BILINEAR_FILTERED,
|
||||||
3, "Albedo", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
3, "Albedo", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||||
4, "SpecMap", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
4, "SpecMap", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||||
|
5, "colorization_mask", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||||
} // ObjectPass2Shader
|
} // ObjectPass2Shader
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
@ -143,7 +143,7 @@ public:
|
|||||||
}; // ObjectPass1Shader
|
}; // ObjectPass1Shader
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
class ObjectPass2Shader : public TextureShader < ObjectPass2Shader, 5,
|
class ObjectPass2Shader : public TextureShader < ObjectPass2Shader, 6,
|
||||||
core::matrix4, core::matrix4 >
|
core::matrix4, core::matrix4 >
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
@ -142,13 +142,6 @@ void STKAnimatedMesh::updateNoGL()
|
|||||||
{
|
{
|
||||||
TransparentMesh[TM_ADDITIVE].push_back(&mesh);
|
TransparentMesh[TM_ADDITIVE].push_back(&mesh);
|
||||||
}
|
}
|
||||||
else if (mesh.m_render_info != NULL)
|
|
||||||
{
|
|
||||||
// For now, put all meshes that support custom render info into
|
|
||||||
// solid (default) material first, this allowing changing fewer
|
|
||||||
// shaders
|
|
||||||
MeshSolidMaterial[Material::SHADERTYPE_SOLID].push_back(&mesh);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Material::ShaderType MatType = material->getShaderType();// getMeshMaterialFromType(type, mb->getVertexType(), material);
|
Material::ShaderType MatType = material->getShaderType();// getMeshMaterialFromType(type, mb->getVertexType(), material);
|
||||||
|
@ -197,14 +197,6 @@ void STKMeshSceneNode::updateNoGL()
|
|||||||
else
|
else
|
||||||
additive = (TranspMat == TM_ADDITIVE);
|
additive = (TranspMat == TM_ADDITIVE);
|
||||||
}
|
}
|
||||||
else if (mesh.m_render_info != NULL)
|
|
||||||
{
|
|
||||||
// For now, put all meshes that support custom render info into
|
|
||||||
// solid (default) material first, this allowing changing fewer
|
|
||||||
// shaders
|
|
||||||
if (!immediate_draw)
|
|
||||||
MeshSolidMaterial[Material::SHADERTYPE_SOLID].push_back(&mesh);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
assert(!isDisplacement);
|
assert(!isDisplacement);
|
||||||
@ -397,15 +389,25 @@ void STKMeshSceneNode::render()
|
|||||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0]))
|
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0]))
|
||||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[0]);
|
glMakeTextureHandleResidentARB(mesh.TextureHandles[0]);
|
||||||
|
|
||||||
if (!mesh.TextureHandles[1])
|
if (!mesh.TextureHandles[1])
|
||||||
mesh.TextureHandles[1] =
|
mesh.TextureHandles[1] =
|
||||||
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[1]),
|
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[1]),
|
||||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[1]))
|
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[1]))
|
||||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[1]);
|
glMakeTextureHandleResidentARB(mesh.TextureHandles[1]);
|
||||||
|
|
||||||
|
if (!mesh.TextureHandles[2])
|
||||||
|
mesh.TextureHandles[2] =
|
||||||
|
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[7]),
|
||||||
|
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||||
|
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[2]))
|
||||||
|
glMakeTextureHandleResidentARB(mesh.TextureHandles[2]);
|
||||||
|
|
||||||
Shaders::ObjectPass2Shader::getInstance()
|
Shaders::ObjectPass2Shader::getInstance()
|
||||||
->setTextureHandles(DiffuseHandle, SpecularHandle, SSAOHandle,
|
->setTextureHandles(DiffuseHandle, SpecularHandle, SSAOHandle,
|
||||||
mesh.TextureHandles[0], mesh.TextureHandles[1]);
|
mesh.TextureHandles[0], mesh.TextureHandles[1],
|
||||||
|
mesh.TextureHandles[2]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Shaders::ObjectPass2Shader::getInstance()->setTextureUnits(
|
Shaders::ObjectPass2Shader::getInstance()->setTextureUnits(
|
||||||
@ -413,7 +415,8 @@ void STKMeshSceneNode::render()
|
|||||||
irr_driver->getRenderTargetTexture(RTT_SPECULAR),
|
irr_driver->getRenderTargetTexture(RTT_SPECULAR),
|
||||||
irr_driver->getRenderTargetTexture(RTT_HALF1_R),
|
irr_driver->getRenderTargetTexture(RTT_HALF1_R),
|
||||||
getTextureGLuint(mesh.textures[0]),
|
getTextureGLuint(mesh.textures[0]),
|
||||||
getTextureGLuint(mesh.textures[1]));
|
getTextureGLuint(mesh.textures[1]),
|
||||||
|
getTextureGLuint(mesh.textures[7]));
|
||||||
Shaders::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation,
|
Shaders::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation,
|
||||||
mesh.TextureMatrix);
|
mesh.TextureMatrix);
|
||||||
assert(mesh.vao);
|
assert(mesh.vao);
|
||||||
|
@ -56,7 +56,7 @@ void ModelDefinitionLoader::addModelDefinition(const XMLNode* xml)
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
LODNode* ModelDefinitionLoader::instanciateAsLOD(const XMLNode* node, scene::ISceneNode* parent)
|
LODNode* ModelDefinitionLoader::instanciateAsLOD(const XMLNode* node, scene::ISceneNode* parent, RenderInfo* ri)
|
||||||
{
|
{
|
||||||
scene::ISceneManager* sm = irr_driver->getSceneManager();
|
scene::ISceneManager* sm = irr_driver->getSceneManager();
|
||||||
|
|
||||||
@ -88,7 +88,8 @@ LODNode* ModelDefinitionLoader::instanciateAsLOD(const XMLNode* node, scene::ISc
|
|||||||
//cache.push_back(a_mesh);
|
//cache.push_back(a_mesh);
|
||||||
irr_driver->grabAllTextures(a_mesh);
|
irr_driver->grabAllTextures(a_mesh);
|
||||||
m_track->addCachedMesh(a_mesh);
|
m_track->addCachedMesh(a_mesh);
|
||||||
scene::IAnimatedMeshSceneNode* scene_node = irr_driver->addAnimatedMesh(a_mesh, group[m].m_model_file);
|
scene::IAnimatedMeshSceneNode* scene_node = irr_driver
|
||||||
|
->addAnimatedMesh(a_mesh, group[m].m_model_file, NULL, ri);
|
||||||
|
|
||||||
m_track->handleAnimatedTextures(scene_node, *group[m].m_xml);
|
m_track->handleAnimatedTextures(scene_node, *group[m].m_xml);
|
||||||
|
|
||||||
@ -111,7 +112,8 @@ LODNode* ModelDefinitionLoader::instanciateAsLOD(const XMLNode* node, scene::ISc
|
|||||||
//cache.push_back(a_mesh);
|
//cache.push_back(a_mesh);
|
||||||
irr_driver->grabAllTextures(a_mesh);
|
irr_driver->grabAllTextures(a_mesh);
|
||||||
m_track->addCachedMesh(a_mesh);
|
m_track->addCachedMesh(a_mesh);
|
||||||
scene::IMeshSceneNode* scene_node = irr_driver->addMesh(a_mesh, group[m].m_model_file);
|
scene::IMeshSceneNode* scene_node = irr_driver
|
||||||
|
->addMesh(a_mesh, group[m].m_model_file, NULL, ri);
|
||||||
|
|
||||||
m_track->handleAnimatedTextures(scene_node, *group[m].m_xml);
|
m_track->handleAnimatedTextures(scene_node, *group[m].m_xml);
|
||||||
|
|
||||||
|
@ -20,8 +20,9 @@
|
|||||||
#define HEADER_LOD_NODE_LOADER_HPP
|
#define HEADER_LOD_NODE_LOADER_HPP
|
||||||
|
|
||||||
class LODNode;
|
class LODNode;
|
||||||
class Track;
|
|
||||||
class STKInstancedSceneNode;
|
class STKInstancedSceneNode;
|
||||||
|
class RenderInfo;
|
||||||
|
class Track;
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <map>
|
#include <map>
|
||||||
@ -88,7 +89,9 @@ public:
|
|||||||
ModelDefinitionLoader(Track* track);
|
ModelDefinitionLoader(Track* track);
|
||||||
|
|
||||||
void addModelDefinition(const XMLNode* xml);
|
void addModelDefinition(const XMLNode* xml);
|
||||||
LODNode* instanciateAsLOD(const XMLNode* xml_node, scene::ISceneNode* parent);
|
LODNode* instanciateAsLOD(const XMLNode* xml_node,
|
||||||
|
scene::ISceneNode* parent,
|
||||||
|
RenderInfo* ri);
|
||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "graphics/particle_kind.hpp"
|
#include "graphics/particle_kind.hpp"
|
||||||
#include "graphics/particle_kind_manager.hpp"
|
#include "graphics/particle_kind_manager.hpp"
|
||||||
#include "graphics/stk_text_billboard.hpp"
|
#include "graphics/stk_text_billboard.hpp"
|
||||||
|
#include "graphics/render_info.hpp"
|
||||||
#include "guiengine/scalable_font.hpp"
|
#include "guiengine/scalable_font.hpp"
|
||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
#include "io/xml_node.hpp"
|
#include "io/xml_node.hpp"
|
||||||
@ -1220,7 +1221,7 @@ bool Track::loadMainTrack(const XMLNode &root)
|
|||||||
|
|
||||||
if (lod_instance)
|
if (lod_instance)
|
||||||
{
|
{
|
||||||
LODNode* node = lodLoader.instanciateAsLOD(n, NULL);
|
LODNode* node = lodLoader.instanciateAsLOD(n, NULL, NULL);
|
||||||
if (node != NULL)
|
if (node != NULL)
|
||||||
{
|
{
|
||||||
node->setPosition(xyz);
|
node->setPosition(xyz);
|
||||||
@ -1737,7 +1738,7 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loadObjects(root, path, model_def_loader, true, NULL, NULL);
|
loadObjects(root, path, model_def_loader, true, NULL, NULL, NULL);
|
||||||
|
|
||||||
model_def_loader.cleanLibraryNodesAfterLoad();
|
model_def_loader.cleanLibraryNodesAfterLoad();
|
||||||
|
|
||||||
@ -1927,7 +1928,7 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id)
|
|||||||
|
|
||||||
void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefinitionLoader& model_def_loader,
|
void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefinitionLoader& model_def_loader,
|
||||||
bool create_lod_definitions, scene::ISceneNode* parent,
|
bool create_lod_definitions, scene::ISceneNode* parent,
|
||||||
TrackObject* parent_library)
|
TrackObject* parent_library, RenderInfo* ri)
|
||||||
{
|
{
|
||||||
unsigned int start_position_counter = 0;
|
unsigned int start_position_counter = 0;
|
||||||
|
|
||||||
@ -1941,7 +1942,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
|
|||||||
if (name == "track" || name == "default-start") continue;
|
if (name == "track" || name == "default-start") continue;
|
||||||
if (name == "object" || name == "library")
|
if (name == "object" || name == "library")
|
||||||
{
|
{
|
||||||
m_track_object_manager->add(*node, parent, model_def_loader, parent_library);
|
m_track_object_manager->add(*node, parent, model_def_loader, parent_library, ri);
|
||||||
}
|
}
|
||||||
else if (name == "water")
|
else if (name == "water")
|
||||||
{
|
{
|
||||||
@ -1985,7 +1986,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
|
|||||||
{
|
{
|
||||||
if (UserConfigParams::m_graphical_effects)
|
if (UserConfigParams::m_graphical_effects)
|
||||||
{
|
{
|
||||||
m_track_object_manager->add(*node, parent, model_def_loader, parent_library);
|
m_track_object_manager->add(*node, parent, model_def_loader, parent_library, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (name == "sky-dome" || name == "sky-box" || name == "sky-color")
|
else if (name == "sky-dome" || name == "sky-box" || name == "sky-color")
|
||||||
@ -1998,7 +1999,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
|
|||||||
}
|
}
|
||||||
else if (name == "light")
|
else if (name == "light")
|
||||||
{
|
{
|
||||||
m_track_object_manager->add(*node, parent, model_def_loader, parent_library);
|
m_track_object_manager->add(*node, parent, model_def_loader, parent_library, NULL);
|
||||||
}
|
}
|
||||||
else if (name == "weather")
|
else if (name == "weather")
|
||||||
{
|
{
|
||||||
|
@ -57,6 +57,7 @@ class MusicInformation;
|
|||||||
class ParticleEmitter;
|
class ParticleEmitter;
|
||||||
class ParticleKind;
|
class ParticleKind;
|
||||||
class PhysicalObject;
|
class PhysicalObject;
|
||||||
|
class RenderInfo;
|
||||||
class TrackObject;
|
class TrackObject;
|
||||||
class TrackObjectManager;
|
class TrackObjectManager;
|
||||||
class TriangleMesh;
|
class TriangleMesh;
|
||||||
@ -457,7 +458,8 @@ public:
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
void loadObjects(const XMLNode* root, const std::string& path,
|
void loadObjects(const XMLNode* root, const std::string& path,
|
||||||
ModelDefinitionLoader& lod_loader, bool create_lod_definitions,
|
ModelDefinitionLoader& lod_loader, bool create_lod_definitions,
|
||||||
scene::ISceneNode* parent, TrackObject* parent_library);
|
scene::ISceneNode* parent, TrackObject* parent_library,
|
||||||
|
RenderInfo* ri);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
bool isSoccer () const { return m_is_soccer; }
|
bool isSoccer () const { return m_is_soccer; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "animations/three_d_animation.hpp"
|
#include "animations/three_d_animation.hpp"
|
||||||
#include "graphics/irr_driver.hpp"
|
#include "graphics/irr_driver.hpp"
|
||||||
|
#include "graphics/render_info.hpp"
|
||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
#include "io/xml_node.hpp"
|
#include "io/xml_node.hpp"
|
||||||
#include "input/device_manager.hpp"
|
#include "input/device_manager.hpp"
|
||||||
@ -42,9 +43,9 @@
|
|||||||
*/
|
*/
|
||||||
TrackObject::TrackObject(const XMLNode &xml_node, scene::ISceneNode* parent,
|
TrackObject::TrackObject(const XMLNode &xml_node, scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader,
|
ModelDefinitionLoader& model_def_loader,
|
||||||
TrackObject* parent_library)
|
TrackObject* parent_library, RenderInfo* ri)
|
||||||
{
|
{
|
||||||
init(xml_node, parent, model_def_loader, parent_library);
|
init(xml_node, parent, model_def_loader, parent_library, ri);
|
||||||
} // TrackObject
|
} // TrackObject
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -93,7 +94,7 @@ TrackObject::TrackObject(const core::vector3df& xyz, const core::vector3df& hpr,
|
|||||||
*/
|
*/
|
||||||
void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
|
void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader,
|
ModelDefinitionLoader& model_def_loader,
|
||||||
TrackObject* parent_library)
|
TrackObject* parent_library, RenderInfo* ri)
|
||||||
{
|
{
|
||||||
m_init_xyz = core::vector3df(0,0,0);
|
m_init_xyz = core::vector3df(0,0,0);
|
||||||
m_init_hpr = core::vector3df(0,0,0);
|
m_init_hpr = core::vector3df(0,0,0);
|
||||||
@ -183,7 +184,7 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
|
|||||||
{
|
{
|
||||||
m_type = "lod";
|
m_type = "lod";
|
||||||
TrackObjectPresentationLOD* lod_node =
|
TrackObjectPresentationLOD* lod_node =
|
||||||
new TrackObjectPresentationLOD(xml_node, parent, model_def_loader);
|
new TrackObjectPresentationLOD(xml_node, parent, model_def_loader, ri);
|
||||||
m_presentation = lod_node;
|
m_presentation = lod_node;
|
||||||
|
|
||||||
LODNode* node = (LODNode*)lod_node->getNode();
|
LODNode* node = (LODNode*)lod_node->getNode();
|
||||||
@ -207,7 +208,8 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
|
|||||||
m_type = "mesh";
|
m_type = "mesh";
|
||||||
m_presentation = new TrackObjectPresentationMesh(xml_node,
|
m_presentation = new TrackObjectPresentationMesh(xml_node,
|
||||||
m_enabled,
|
m_enabled,
|
||||||
parent);
|
parent,
|
||||||
|
ri);
|
||||||
scene::ISceneNode* node = ((TrackObjectPresentationMesh *)m_presentation)->getNode();
|
scene::ISceneNode* node = ((TrackObjectPresentationMesh *)m_presentation)->getNode();
|
||||||
if (type == "movable" && parent != NULL)
|
if (type == "movable" && parent != NULL)
|
||||||
{
|
{
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
class XMLNode;
|
class XMLNode;
|
||||||
class ThreeDAnimation;
|
class ThreeDAnimation;
|
||||||
class ModelDefinitionLoader;
|
class ModelDefinitionLoader;
|
||||||
|
class RenderInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup tracks
|
* \ingroup tracks
|
||||||
@ -98,13 +99,14 @@ protected:
|
|||||||
|
|
||||||
void init(const XMLNode &xml_node, scene::ISceneNode* parent,
|
void init(const XMLNode &xml_node, scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader,
|
ModelDefinitionLoader& model_def_loader,
|
||||||
TrackObject* parent_library);
|
TrackObject* parent_library, RenderInfo* ri);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TrackObject(const XMLNode &xml_node,
|
TrackObject(const XMLNode &xml_node,
|
||||||
scene::ISceneNode* parent,
|
scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader,
|
ModelDefinitionLoader& model_def_loader,
|
||||||
TrackObject* parent_library);
|
TrackObject* parent_library,
|
||||||
|
RenderInfo* ri);
|
||||||
|
|
||||||
TrackObject(const core::vector3df& xyz,
|
TrackObject(const core::vector3df& xyz,
|
||||||
const core::vector3df& hpr,
|
const core::vector3df& hpr,
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "animations/three_d_animation.hpp"
|
#include "animations/three_d_animation.hpp"
|
||||||
#include "graphics/lod_node.hpp"
|
#include "graphics/lod_node.hpp"
|
||||||
#include "graphics/material_manager.hpp"
|
#include "graphics/material_manager.hpp"
|
||||||
|
#include "graphics/render_info.hpp"
|
||||||
#include "io/xml_node.hpp"
|
#include "io/xml_node.hpp"
|
||||||
#include "physics/physical_object.hpp"
|
#include "physics/physical_object.hpp"
|
||||||
#include "tracks/track_object.hpp"
|
#include "tracks/track_object.hpp"
|
||||||
@ -45,11 +46,11 @@ TrackObjectManager::~TrackObjectManager()
|
|||||||
*/
|
*/
|
||||||
void TrackObjectManager::add(const XMLNode &xml_node, scene::ISceneNode* parent,
|
void TrackObjectManager::add(const XMLNode &xml_node, scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader,
|
ModelDefinitionLoader& model_def_loader,
|
||||||
TrackObject* parent_library)
|
TrackObject* parent_library, RenderInfo* ri)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
TrackObject *obj = new TrackObject(xml_node, parent, model_def_loader, parent_library);
|
TrackObject *obj = new TrackObject(xml_node, parent, model_def_loader, parent_library, ri);
|
||||||
m_all_objects.push_back(obj);
|
m_all_objects.push_back(obj);
|
||||||
if(obj->isDriveable())
|
if(obj->isDriveable())
|
||||||
m_driveable_objects.push_back(obj);
|
m_driveable_objects.push_back(obj);
|
||||||
|
@ -23,10 +23,11 @@
|
|||||||
#include "tracks/track_object.hpp"
|
#include "tracks/track_object.hpp"
|
||||||
#include "utils/ptr_vector.hpp"
|
#include "utils/ptr_vector.hpp"
|
||||||
|
|
||||||
|
class LODNode;
|
||||||
|
class RenderInfo;
|
||||||
class Track;
|
class Track;
|
||||||
class Vec3;
|
class Vec3;
|
||||||
class XMLNode;
|
class XMLNode;
|
||||||
class LODNode;
|
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -58,7 +59,7 @@ public:
|
|||||||
void init();
|
void init();
|
||||||
void add(const XMLNode &xml_node, scene::ISceneNode* parent,
|
void add(const XMLNode &xml_node, scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader,
|
ModelDefinitionLoader& model_def_loader,
|
||||||
TrackObject* parent_library);
|
TrackObject* parent_library, RenderInfo* ri);
|
||||||
void update(float dt);
|
void update(float dt);
|
||||||
void handleExplosion(const Vec3 &pos, const PhysicalObject *mp,
|
void handleExplosion(const Vec3 &pos, const PhysicalObject *mp,
|
||||||
bool secondary_hits=true);
|
bool secondary_hits=true);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "graphics/particle_emitter.hpp"
|
#include "graphics/particle_emitter.hpp"
|
||||||
#include "graphics/particle_kind_manager.hpp"
|
#include "graphics/particle_kind_manager.hpp"
|
||||||
#include "graphics/stk_mesh_scene_node.hpp"
|
#include "graphics/stk_mesh_scene_node.hpp"
|
||||||
|
#include "graphics/render_info.hpp"
|
||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
#include "io/xml_node.hpp"
|
#include "io/xml_node.hpp"
|
||||||
#include "input/device_manager.hpp"
|
#include "input/device_manager.hpp"
|
||||||
@ -176,8 +177,13 @@ TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode(
|
|||||||
ModelDefinitionLoader& model_def_loader)
|
ModelDefinitionLoader& model_def_loader)
|
||||||
: TrackObjectPresentationSceneNode(xml_node)
|
: TrackObjectPresentationSceneNode(xml_node)
|
||||||
{
|
{
|
||||||
|
m_render_info = NULL;
|
||||||
std::string name;
|
std::string name;
|
||||||
xml_node.get("name", &name);
|
xml_node.get("name", &name);
|
||||||
|
float custom_hue = 0.0f;
|
||||||
|
xml_node.get("hue", &custom_hue);
|
||||||
|
if (custom_hue > 0.0f)
|
||||||
|
m_render_info = new RenderInfo(custom_hue, false);
|
||||||
|
|
||||||
m_node = irr_driver->getSceneManager()->addEmptySceneNode();
|
m_node = irr_driver->getSceneManager()->addEmptySceneNode();
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@ -267,7 +273,7 @@ TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode(
|
|||||||
|
|
||||||
assert(libroot != NULL);
|
assert(libroot != NULL);
|
||||||
World::getWorld()->getTrack()->loadObjects(libroot, lib_path, model_def_loader,
|
World::getWorld()->getTrack()->loadObjects(libroot, lib_path, model_def_loader,
|
||||||
create_lod_definitions, m_node, parent);
|
create_lod_definitions, m_node, parent, m_render_info);
|
||||||
m_parent = parent;
|
m_parent = parent;
|
||||||
} // TrackObjectPresentationLibraryNode
|
} // TrackObjectPresentationLibraryNode
|
||||||
|
|
||||||
@ -275,6 +281,8 @@ TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode(
|
|||||||
TrackObjectPresentationLibraryNode::~TrackObjectPresentationLibraryNode()
|
TrackObjectPresentationLibraryNode::~TrackObjectPresentationLibraryNode()
|
||||||
{
|
{
|
||||||
irr_driver->removeNode(m_node);
|
irr_driver->removeNode(m_node);
|
||||||
|
delete m_render_info;
|
||||||
|
m_render_info = NULL;
|
||||||
} // TrackObjectPresentationLibraryNode
|
} // TrackObjectPresentationLibraryNode
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
void TrackObjectPresentationLibraryNode::move(const core::vector3df& xyz, const core::vector3df& hpr,
|
void TrackObjectPresentationLibraryNode::move(const core::vector3df& xyz, const core::vector3df& hpr,
|
||||||
@ -297,10 +305,11 @@ void TrackObjectPresentationLibraryNode::move(const core::vector3df& xyz, const
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
TrackObjectPresentationLOD::TrackObjectPresentationLOD(const XMLNode& xml_node,
|
TrackObjectPresentationLOD::TrackObjectPresentationLOD(const XMLNode& xml_node,
|
||||||
scene::ISceneNode* parent,
|
scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader)
|
ModelDefinitionLoader& model_def_loader,
|
||||||
|
RenderInfo* ri)
|
||||||
: TrackObjectPresentationSceneNode(xml_node)
|
: TrackObjectPresentationSceneNode(xml_node)
|
||||||
{
|
{
|
||||||
m_node = model_def_loader.instanciateAsLOD(&xml_node, parent);
|
m_node = model_def_loader.instanciateAsLOD(&xml_node, parent, ri);
|
||||||
if (m_node == NULL) throw std::runtime_error("Cannot load LOD node");
|
if (m_node == NULL) throw std::runtime_error("Cannot load LOD node");
|
||||||
m_node->setPosition(m_init_xyz);
|
m_node->setPosition(m_init_xyz);
|
||||||
m_node->setRotation(m_init_hpr);
|
m_node->setRotation(m_init_hpr);
|
||||||
@ -318,7 +327,8 @@ TrackObjectPresentationLOD::~TrackObjectPresentationLOD()
|
|||||||
TrackObjectPresentationMesh::TrackObjectPresentationMesh(
|
TrackObjectPresentationMesh::TrackObjectPresentationMesh(
|
||||||
const XMLNode& xml_node,
|
const XMLNode& xml_node,
|
||||||
bool enabled,
|
bool enabled,
|
||||||
scene::ISceneNode* parent)
|
scene::ISceneNode* parent,
|
||||||
|
RenderInfo* render_info)
|
||||||
: TrackObjectPresentationSceneNode(xml_node)
|
: TrackObjectPresentationSceneNode(xml_node)
|
||||||
{
|
{
|
||||||
m_is_looped = false;
|
m_is_looped = false;
|
||||||
@ -329,6 +339,7 @@ TrackObjectPresentationMesh::TrackObjectPresentationMesh(
|
|||||||
std::string model_name;
|
std::string model_name;
|
||||||
xml_node.get("model", &model_name );
|
xml_node.get("model", &model_name );
|
||||||
|
|
||||||
|
m_render_info = render_info;
|
||||||
m_model_file = model_name;
|
m_model_file = model_name;
|
||||||
m_is_in_skybox = false;
|
m_is_in_skybox = false;
|
||||||
std::string render_pass;
|
std::string render_pass;
|
||||||
@ -380,6 +391,7 @@ TrackObjectPresentationMesh::TrackObjectPresentationMesh(
|
|||||||
m_mesh = NULL;
|
m_mesh = NULL;
|
||||||
m_node = NULL;
|
m_node = NULL;
|
||||||
m_mesh = model;
|
m_mesh = model;
|
||||||
|
m_render_info = NULL;
|
||||||
init(NULL, NULL, true);
|
init(NULL, NULL, true);
|
||||||
} // TrackObjectPresentationMesh
|
} // TrackObjectPresentationMesh
|
||||||
|
|
||||||
@ -395,6 +407,7 @@ TrackObjectPresentationMesh::TrackObjectPresentationMesh(
|
|||||||
m_mesh = NULL;
|
m_mesh = NULL;
|
||||||
m_node = NULL;
|
m_node = NULL;
|
||||||
m_is_in_skybox = false;
|
m_is_in_skybox = false;
|
||||||
|
m_render_info = NULL;
|
||||||
bool animated = (UserConfigParams::m_graphical_effects ||
|
bool animated = (UserConfigParams::m_graphical_effects ||
|
||||||
World::getWorld()->getIdent() == IDENT_CUTSCENE);
|
World::getWorld()->getIdent() == IDENT_CUTSCENE);
|
||||||
|
|
||||||
@ -447,7 +460,7 @@ void TrackObjectPresentationMesh::init(const XMLNode* xml_node,
|
|||||||
{
|
{
|
||||||
// Animated
|
// Animated
|
||||||
//m_node = irr_driver->getSceneManager()->addEmptySceneNode();
|
//m_node = irr_driver->getSceneManager()->addEmptySceneNode();
|
||||||
m_node = irr_driver->addMesh(m_mesh, m_model_file, parent);
|
m_node = irr_driver->addMesh(m_mesh, m_model_file, parent, m_render_info);
|
||||||
enabled = false;
|
enabled = false;
|
||||||
m_force_always_hidden = true;
|
m_force_always_hidden = true;
|
||||||
m_frame_start = 0;
|
m_frame_start = 0;
|
||||||
@ -456,7 +469,7 @@ void TrackObjectPresentationMesh::init(const XMLNode* xml_node,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Static
|
// Static
|
||||||
m_node = irr_driver->addMesh(m_mesh, m_model_file, parent);
|
m_node = irr_driver->addMesh(m_mesh, m_model_file, parent, m_render_info);
|
||||||
enabled = false;
|
enabled = false;
|
||||||
m_force_always_hidden = true;
|
m_force_always_hidden = true;
|
||||||
m_frame_start = 0;
|
m_frame_start = 0;
|
||||||
@ -482,7 +495,7 @@ void TrackObjectPresentationMesh::init(const XMLNode* xml_node,
|
|||||||
{
|
{
|
||||||
scene::IAnimatedMeshSceneNode *node =
|
scene::IAnimatedMeshSceneNode *node =
|
||||||
irr_driver->addAnimatedMesh((scene::IAnimatedMesh*)m_mesh,
|
irr_driver->addAnimatedMesh((scene::IAnimatedMesh*)m_mesh,
|
||||||
m_model_file, parent);
|
m_model_file, parent, m_render_info);
|
||||||
m_node = node;
|
m_node = node;
|
||||||
|
|
||||||
m_frame_start = node->getStartFrame();
|
m_frame_start = node->getStartFrame();
|
||||||
@ -503,7 +516,7 @@ void TrackObjectPresentationMesh::init(const XMLNode* xml_node,
|
|||||||
if (xml_node)
|
if (xml_node)
|
||||||
xml_node->get("displacing", &displacing);
|
xml_node->get("displacing", &displacing);
|
||||||
|
|
||||||
m_node = irr_driver->addMesh(m_mesh, m_model_file, parent);
|
m_node = irr_driver->addMesh(m_mesh, m_model_file, parent, m_render_info);
|
||||||
|
|
||||||
STKMeshSceneNode* stkmesh = dynamic_cast<STKMeshSceneNode*>(m_node);
|
STKMeshSceneNode* stkmesh = dynamic_cast<STKMeshSceneNode*>(m_node);
|
||||||
if (displacing && stkmesh != NULL)
|
if (displacing && stkmesh != NULL)
|
||||||
|
@ -37,6 +37,7 @@ class ParticleEmitter;
|
|||||||
class PhysicalObject;
|
class PhysicalObject;
|
||||||
class ThreeDAnimation;
|
class ThreeDAnimation;
|
||||||
class ModelDefinitionLoader;
|
class ModelDefinitionLoader;
|
||||||
|
class RenderInfo;
|
||||||
class STKInstancedSceneNode;
|
class STKInstancedSceneNode;
|
||||||
class XMLNode;
|
class XMLNode;
|
||||||
class TrackObject;
|
class TrackObject;
|
||||||
@ -184,6 +185,7 @@ public:
|
|||||||
class TrackObjectPresentationLibraryNode : public TrackObjectPresentationSceneNode
|
class TrackObjectPresentationLibraryNode : public TrackObjectPresentationSceneNode
|
||||||
{
|
{
|
||||||
TrackObject* m_parent;
|
TrackObject* m_parent;
|
||||||
|
RenderInfo* m_render_info;
|
||||||
public:
|
public:
|
||||||
TrackObjectPresentationLibraryNode(TrackObject* parent,
|
TrackObjectPresentationLibraryNode(TrackObject* parent,
|
||||||
const XMLNode& xml_node,
|
const XMLNode& xml_node,
|
||||||
@ -203,7 +205,8 @@ public:
|
|||||||
|
|
||||||
TrackObjectPresentationLOD(const XMLNode& xml_node,
|
TrackObjectPresentationLOD(const XMLNode& xml_node,
|
||||||
scene::ISceneNode* parent,
|
scene::ISceneNode* parent,
|
||||||
ModelDefinitionLoader& model_def_loader);
|
ModelDefinitionLoader& model_def_loader,
|
||||||
|
RenderInfo* ri);
|
||||||
virtual ~TrackObjectPresentationLOD();
|
virtual ~TrackObjectPresentationLOD();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -232,11 +235,14 @@ private:
|
|||||||
|
|
||||||
std::string m_model_file;
|
std::string m_model_file;
|
||||||
|
|
||||||
|
RenderInfo* m_render_info;
|
||||||
|
|
||||||
void init(const XMLNode* xml_node, scene::ISceneNode* parent, bool enabled);
|
void init(const XMLNode* xml_node, scene::ISceneNode* parent, bool enabled);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TrackObjectPresentationMesh(const XMLNode& xml_node, bool enabled,
|
TrackObjectPresentationMesh(const XMLNode& xml_node, bool enabled,
|
||||||
scene::ISceneNode* parent);
|
scene::ISceneNode* parent,
|
||||||
|
RenderInfo* render_info);
|
||||||
|
|
||||||
TrackObjectPresentationMesh(const std::string& model_file,
|
TrackObjectPresentationMesh(const std::string& model_file,
|
||||||
const core::vector3df& xyz,
|
const core::vector3df& xyz,
|
||||||
|
Loading…
Reference in New Issue
Block a user