STKMesh: Transparent texture can move now.
This commit is contained in:
parent
40c4155bd2
commit
8ba0fcb8e0
@ -1,5 +1,6 @@
|
|||||||
#version 330
|
#version 330
|
||||||
uniform mat4 ModelViewProjectionMatrix;
|
uniform mat4 ModelViewProjectionMatrix;
|
||||||
|
uniform mat4 TextureMatrix;
|
||||||
|
|
||||||
in vec3 Position;
|
in vec3 Position;
|
||||||
in vec2 Texcoord;
|
in vec2 Texcoord;
|
||||||
@ -7,6 +8,6 @@ out vec2 uv;
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
uv = Texcoord;
|
uv = (TextureMatrix * vec4(Texcoord, 1., 1.)).xy;
|
||||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||||
}
|
}
|
||||||
|
@ -794,7 +794,7 @@ namespace MeshShader
|
|||||||
uniform_time = glGetUniformLocation(Program, "time");
|
uniform_time = glGetUniformLocation(Program, "time");
|
||||||
uniform_transparency = glGetUniformLocation(Program, "transparency");
|
uniform_transparency = glGetUniformLocation(Program, "transparency");
|
||||||
}
|
}
|
||||||
void BubbleShader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency)
|
void BubbleShader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency)
|
||||||
{
|
{
|
||||||
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
||||||
glUniform1i(uniform_tex, TU_tex);
|
glUniform1i(uniform_tex, TU_tex);
|
||||||
@ -806,6 +806,7 @@ namespace MeshShader
|
|||||||
GLuint TransparentShader::attrib_position;
|
GLuint TransparentShader::attrib_position;
|
||||||
GLuint TransparentShader::attrib_texcoord;
|
GLuint TransparentShader::attrib_texcoord;
|
||||||
GLuint TransparentShader::uniform_MVP;
|
GLuint TransparentShader::uniform_MVP;
|
||||||
|
GLuint TransparentShader::uniform_TM;
|
||||||
GLuint TransparentShader::uniform_tex;
|
GLuint TransparentShader::uniform_tex;
|
||||||
|
|
||||||
void TransparentShader::init()
|
void TransparentShader::init()
|
||||||
@ -814,12 +815,14 @@ namespace MeshShader
|
|||||||
attrib_position = glGetAttribLocation(Program, "Position");
|
attrib_position = glGetAttribLocation(Program, "Position");
|
||||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||||
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
||||||
|
uniform_TM = glGetUniformLocation(Program, "TextureMatrix");
|
||||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransparentShader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex)
|
void TransparentShader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix, unsigned TU_tex)
|
||||||
{
|
{
|
||||||
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
||||||
|
glUniformMatrix4fv(uniform_TM, 1, GL_FALSE, TextureMatrix.pointer());
|
||||||
glUniform1i(uniform_tex, TU_tex);
|
glUniform1i(uniform_tex, TU_tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -827,6 +830,7 @@ namespace MeshShader
|
|||||||
GLuint TransparentFogShader::attrib_position;
|
GLuint TransparentFogShader::attrib_position;
|
||||||
GLuint TransparentFogShader::attrib_texcoord;
|
GLuint TransparentFogShader::attrib_texcoord;
|
||||||
GLuint TransparentFogShader::uniform_MVP;
|
GLuint TransparentFogShader::uniform_MVP;
|
||||||
|
GLuint TransparentFogShader::uniform_TM;
|
||||||
GLuint TransparentFogShader::uniform_tex;
|
GLuint TransparentFogShader::uniform_tex;
|
||||||
GLuint TransparentFogShader::uniform_fogmax;
|
GLuint TransparentFogShader::uniform_fogmax;
|
||||||
GLuint TransparentFogShader::uniform_startH;
|
GLuint TransparentFogShader::uniform_startH;
|
||||||
@ -843,6 +847,7 @@ namespace MeshShader
|
|||||||
attrib_position = glGetAttribLocation(Program, "Position");
|
attrib_position = glGetAttribLocation(Program, "Position");
|
||||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||||
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
||||||
|
uniform_TM = glGetUniformLocation(Program, "TextureMatrix");
|
||||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||||
uniform_fogmax = glGetUniformLocation(Program, "fogmax");
|
uniform_fogmax = glGetUniformLocation(Program, "fogmax");
|
||||||
uniform_startH = glGetUniformLocation(Program, "startH");
|
uniform_startH = glGetUniformLocation(Program, "startH");
|
||||||
@ -854,9 +859,10 @@ namespace MeshShader
|
|||||||
uniform_ipvmat = glGetUniformLocation(Program, "ipvmat");
|
uniform_ipvmat = glGetUniformLocation(Program, "ipvmat");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransparentFogShader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &ipvmat, float fogmax, float startH, float endH, float start, float end, const core::vector3df &col, const core::vector3df &campos, unsigned TU_tex)
|
void TransparentFogShader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix, const core::matrix4 &ipvmat, float fogmax, float startH, float endH, float start, float end, const core::vector3df &col, const core::vector3df &campos, unsigned TU_tex)
|
||||||
{
|
{
|
||||||
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
||||||
|
glUniformMatrix4fv(uniform_TM, 1, GL_FALSE, TextureMatrix.pointer());
|
||||||
glUniform1f(uniform_fogmax, fogmax);
|
glUniform1f(uniform_fogmax, fogmax);
|
||||||
glUniform1f(uniform_startH, startH);
|
glUniform1f(uniform_startH, startH);
|
||||||
glUniform1f(uniform_endH, endH);
|
glUniform1f(uniform_endH, endH);
|
||||||
|
@ -185,10 +185,10 @@ class BubbleShader
|
|||||||
public:
|
public:
|
||||||
static GLuint Program;
|
static GLuint Program;
|
||||||
static GLuint attrib_position, attrib_texcoord;
|
static GLuint attrib_position, attrib_texcoord;
|
||||||
static GLuint uniform_MVP, uniform_tex, uniform_time, uniform_transparency;
|
static GLuint uniform_MVP, uniform_tex, uniform_time, uniform_transparency;
|
||||||
|
|
||||||
static void init();
|
static void init();
|
||||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency);
|
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TransparentShader
|
class TransparentShader
|
||||||
@ -196,10 +196,10 @@ class TransparentShader
|
|||||||
public:
|
public:
|
||||||
static GLuint Program;
|
static GLuint Program;
|
||||||
static GLuint attrib_position, attrib_texcoord;
|
static GLuint attrib_position, attrib_texcoord;
|
||||||
static GLuint uniform_MVP, uniform_tex;
|
static GLuint uniform_MVP, uniform_TM, uniform_tex;
|
||||||
|
|
||||||
static void init();
|
static void init();
|
||||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex);
|
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix, unsigned TU_tex);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TransparentFogShader
|
class TransparentFogShader
|
||||||
@ -207,10 +207,10 @@ class TransparentFogShader
|
|||||||
public:
|
public:
|
||||||
static GLuint Program;
|
static GLuint Program;
|
||||||
static GLuint attrib_position, attrib_texcoord;
|
static GLuint attrib_position, attrib_texcoord;
|
||||||
static GLuint uniform_MVP, uniform_tex, uniform_fogmax, uniform_startH, uniform_endH, uniform_start, uniform_end, uniform_col, uniform_screen, uniform_ipvmat;
|
static GLuint uniform_MVP, uniform_TM, uniform_tex, uniform_fogmax, uniform_startH, uniform_endH, uniform_start, uniform_end, uniform_col, uniform_screen, uniform_ipvmat;
|
||||||
|
|
||||||
static void init();
|
static void init();
|
||||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &ipvmat, float fogmax, float startH, float endH, float start, float end, const core::vector3df &col, const core::vector3df &campos, unsigned TU_tex);
|
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix, const core::matrix4 &ipvmat, float fogmax, float startH, float endH, float start, float end, const core::vector3df &col, const core::vector3df &campos, unsigned TU_tex);
|
||||||
};
|
};
|
||||||
|
|
||||||
class BillboardShader
|
class BillboardShader
|
||||||
|
@ -33,9 +33,9 @@ void STKAnimatedMesh::drawTransparent(const GLMesh &mesh, video::E_MATERIAL_TYPE
|
|||||||
computeMVP(ModelViewProjectionMatrix);
|
computeMVP(ModelViewProjectionMatrix);
|
||||||
|
|
||||||
if (World::getWorld()->getTrack()->isFogEnabled())
|
if (World::getWorld()->getTrack()->isFogEnabled())
|
||||||
drawTransparentFogObject(mesh, ModelViewProjectionMatrix);
|
drawTransparentFogObject(mesh, ModelViewProjectionMatrix, core::matrix4::EM4CONST_IDENTITY);
|
||||||
else
|
else
|
||||||
drawTransparentObject(mesh, ModelViewProjectionMatrix);
|
drawTransparentObject(mesh, ModelViewProjectionMatrix, core::matrix4::EM4CONST_IDENTITY);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -637,8 +637,6 @@ void drawMovingTexture(const GLMesh &mesh, const core::matrix4 &ModelViewProject
|
|||||||
GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ONE };
|
GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ONE };
|
||||||
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
|
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
|
||||||
}
|
}
|
||||||
const float *tmp = TextureMatrix.pointer();
|
|
||||||
printf("TMat : \n %f %f %f %f\n %f %f %f %f\n %f %f %f %f\n %f %f %f %f\n", tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], tmp[6], tmp[7], tmp[8], tmp[9], tmp[10], tmp[11], tmp[12], tmp[13], tmp[14], tmp[15]);
|
|
||||||
|
|
||||||
glUseProgram(MeshShader::MovingTextureShader::Program);
|
glUseProgram(MeshShader::MovingTextureShader::Program);
|
||||||
MeshShader::MovingTextureShader::setUniforms(ModelViewProjectionMatrix, TextureMatrix, 0, 1, 2, 3);
|
MeshShader::MovingTextureShader::setUniforms(ModelViewProjectionMatrix, TextureMatrix, 0, 1, 2, 3);
|
||||||
@ -647,7 +645,7 @@ void drawMovingTexture(const GLMesh &mesh, const core::matrix4 &ModelViewProject
|
|||||||
glDrawElements(ptype, count, itype, 0);
|
glDrawElements(ptype, count, itype, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawTransparentObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix)
|
void drawTransparentObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix)
|
||||||
{
|
{
|
||||||
GLenum ptype = mesh.PrimitiveType;
|
GLenum ptype = mesh.PrimitiveType;
|
||||||
GLenum itype = mesh.IndexType;
|
GLenum itype = mesh.IndexType;
|
||||||
@ -656,13 +654,13 @@ void drawTransparentObject(const GLMesh &mesh, const core::matrix4 &ModelViewPro
|
|||||||
setTexture(0, mesh.textures[0], GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
setTexture(0, mesh.textures[0], GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
||||||
|
|
||||||
glUseProgram(MeshShader::TransparentShader::Program);
|
glUseProgram(MeshShader::TransparentShader::Program);
|
||||||
MeshShader::TransparentShader::setUniforms(ModelViewProjectionMatrix, 0);
|
MeshShader::TransparentShader::setUniforms(ModelViewProjectionMatrix, TextureMatrix, 0);
|
||||||
|
|
||||||
glBindVertexArray(mesh.vao_first_pass);
|
glBindVertexArray(mesh.vao_first_pass);
|
||||||
glDrawElements(ptype, count, itype, 0);
|
glDrawElements(ptype, count, itype, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawTransparentFogObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix)
|
void drawTransparentFogObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix)
|
||||||
{
|
{
|
||||||
GLenum ptype = mesh.PrimitiveType;
|
GLenum ptype = mesh.PrimitiveType;
|
||||||
GLenum itype = mesh.IndexType;
|
GLenum itype = mesh.IndexType;
|
||||||
@ -685,7 +683,7 @@ void drawTransparentFogObject(const GLMesh &mesh, const core::matrix4 &ModelView
|
|||||||
setTexture(0, mesh.textures[0], GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
setTexture(0, mesh.textures[0], GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
||||||
|
|
||||||
glUseProgram(MeshShader::TransparentFogShader::Program);
|
glUseProgram(MeshShader::TransparentFogShader::Program);
|
||||||
MeshShader::TransparentFogShader::setUniforms(ModelViewProjectionMatrix, irr_driver->getInvProjMatrix(), fogmax, startH, endH, start, end, col, Camera::getCamera(0)->getCameraSceneNode()->getAbsolutePosition(), 0);
|
MeshShader::TransparentFogShader::setUniforms(ModelViewProjectionMatrix, TextureMatrix, irr_driver->getInvProjMatrix(), fogmax, startH, endH, start, end, col, Camera::getCamera(0)->getCameraSceneNode()->getAbsolutePosition(), 0);
|
||||||
|
|
||||||
glBindVertexArray(mesh.vao_first_pass);
|
glBindVertexArray(mesh.vao_first_pass);
|
||||||
glDrawElements(ptype, count, itype, 0);
|
glDrawElements(ptype, count, itype, 0);
|
||||||
@ -753,9 +751,9 @@ void STKMesh::drawTransparent(const GLMesh &mesh, video::E_MATERIAL_TYPE type)
|
|||||||
if (type == irr_driver->getShader(ES_BUBBLES))
|
if (type == irr_driver->getShader(ES_BUBBLES))
|
||||||
drawBubble(mesh, ModelViewProjectionMatrix);
|
drawBubble(mesh, ModelViewProjectionMatrix);
|
||||||
else if (World::getWorld()->getTrack()->isFogEnabled())
|
else if (World::getWorld()->getTrack()->isFogEnabled())
|
||||||
drawTransparentFogObject(mesh, ModelViewProjectionMatrix);
|
drawTransparentFogObject(mesh, ModelViewProjectionMatrix, TextureMatrix);
|
||||||
else
|
else
|
||||||
drawTransparentObject(mesh, ModelViewProjectionMatrix);
|
drawTransparentObject(mesh, ModelViewProjectionMatrix, TextureMatrix);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +48,8 @@ void drawObjectRimLimit(const GLMesh &mesh, const core::matrix4 &ModelViewProjec
|
|||||||
void drawObjectUnlit(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
void drawObjectUnlit(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
||||||
|
|
||||||
// Forward pass (for transparents meshes)
|
// Forward pass (for transparents meshes)
|
||||||
void drawTransparentObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
void drawTransparentObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix);
|
||||||
void drawTransparentFogObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
void drawTransparentFogObject(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TextureMatrix);
|
||||||
void drawBubble(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
void drawBubble(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
||||||
|
|
||||||
class STKMesh : public irr::scene::CMeshSceneNode
|
class STKMesh : public irr::scene::CMeshSceneNode
|
||||||
|
Loading…
Reference in New Issue
Block a user