added alpha mask handling and fixed specular color issue
This commit is contained in:
parent
b4aa0acfda
commit
04a82a7364
@ -74,7 +74,7 @@ void main(void) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SPECULAR_TEXTURE
|
#ifdef SPECULAR_TEXTURE
|
||||||
vec3 specular = texture(specularTexture, varTexCoord).rgb;
|
vec3 specular = vec3(texture(specularTexture, varTexCoord).r);
|
||||||
#else
|
#else
|
||||||
vec3 specular = materialKs;
|
vec3 specular = materialKs;
|
||||||
#endif
|
#endif
|
||||||
|
@ -147,6 +147,8 @@ void ForwardModule::compileShaders(Scene* scene)
|
|||||||
defines.push_back(flagStr[DIFFUSE_TEXTURE]);
|
defines.push_back(flagStr[DIFFUSE_TEXTURE]);
|
||||||
if(i & SPECULAR_TEXTURE_FLAG)
|
if(i & SPECULAR_TEXTURE_FLAG)
|
||||||
defines.push_back(flagStr[SPECULAR_TEXTURE]);
|
defines.push_back(flagStr[SPECULAR_TEXTURE]);
|
||||||
|
if(i & ALPHA_MASK_FLAG)
|
||||||
|
defines.push_back(flagStr[ALPHA_MASK]);
|
||||||
|
|
||||||
// for each geometry flag, 3 shaders are compiled, one for each kind of lighting
|
// for each geometry flag, 3 shaders are compiled, one for each kind of lighting
|
||||||
flags.push_back(i);
|
flags.push_back(i);
|
||||||
|
@ -41,6 +41,12 @@ void PhongMaterial::bindAttributes(Shader* myShader)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
myShader->bindVec3(myShader->getLocation("materialKs"), specular);
|
myShader->bindVec3(myShader->getLocation("materialKs"), specular);
|
||||||
|
|
||||||
|
if(alpha_mask != NULL)
|
||||||
|
{
|
||||||
|
alpha_mask->bind(ALPHA_MASK);
|
||||||
|
myShader->bindInteger(myShader->getLocation("alphaMask"), ALPHA_MASK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -71,6 +77,8 @@ unsigned int PhongMaterial::getFlags()
|
|||||||
flags |= DIFFUSE_TEXTURE_FLAG;
|
flags |= DIFFUSE_TEXTURE_FLAG;
|
||||||
if(specular_texture != NULL)
|
if(specular_texture != NULL)
|
||||||
flags |= SPECULAR_TEXTURE_FLAG;
|
flags |= SPECULAR_TEXTURE_FLAG;
|
||||||
|
if(alpha_mask != NULL)
|
||||||
|
flags |= ALPHA_MASK_FLAG;
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,3 +101,8 @@ void PhongMaterial::setNormalMap(Texture* myNormalMap)
|
|||||||
{
|
{
|
||||||
normal_map = myNormalMap;
|
normal_map = myNormalMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PhongMaterial::setAlphaMask(Texture* myAlphaMask)
|
||||||
|
{
|
||||||
|
alpha_mask = myAlphaMask;
|
||||||
|
}
|
||||||
|
@ -17,6 +17,7 @@ public:
|
|||||||
Texture* diffuse_texture;
|
Texture* diffuse_texture;
|
||||||
Texture* specular_texture;
|
Texture* specular_texture;
|
||||||
Texture* normal_map;
|
Texture* normal_map;
|
||||||
|
Texture* alpha_mask;
|
||||||
|
|
||||||
PhongMaterial() :
|
PhongMaterial() :
|
||||||
ambient(0),
|
ambient(0),
|
||||||
@ -26,18 +27,8 @@ public:
|
|||||||
ambient_texture(NULL),
|
ambient_texture(NULL),
|
||||||
diffuse_texture(NULL),
|
diffuse_texture(NULL),
|
||||||
specular_texture(NULL),
|
specular_texture(NULL),
|
||||||
normal_map(NULL)
|
normal_map(NULL),
|
||||||
{}
|
alpha_mask(NULL)
|
||||||
|
|
||||||
PhongMaterial(glm::vec3 myKd, glm::vec3 myKs, float myNs) :
|
|
||||||
ambient(0),
|
|
||||||
diffuse(myKd),
|
|
||||||
specular(myKs),
|
|
||||||
shininess(myNs),
|
|
||||||
ambient_texture(NULL),
|
|
||||||
diffuse_texture(NULL),
|
|
||||||
specular_texture(NULL),
|
|
||||||
normal_map(NULL)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
virtual void bindAttributes(Shader* myShader = NULL);
|
virtual void bindAttributes(Shader* myShader = NULL);
|
||||||
@ -54,6 +45,7 @@ public:
|
|||||||
void setDiffuseTexture(Texture* myTexture);
|
void setDiffuseTexture(Texture* myTexture);
|
||||||
void setSpecularTexture(Texture* myTexture);
|
void setSpecularTexture(Texture* myTexture);
|
||||||
void setNormalMap(Texture* myNormalMap);
|
void setNormalMap(Texture* myNormalMap);
|
||||||
|
void setAlphaMask(Texture* myAlphaMask);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Shader* shader;
|
Shader* shader;
|
||||||
|
18
texture.cpp
18
texture.cpp
@ -72,14 +72,24 @@ void Texture::createNoiseTexture(GLenum textureSlot, int width, int height, floa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
glAssert(glTexImage2D(textureSlot, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data));
|
glAssert(glTexImage2D(textureSlot, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Texture::createTexture(Image* myImage, GLenum textureSlot)
|
void Texture::createTexture(Image* myImage, GLenum textureSlot)
|
||||||
{
|
{
|
||||||
int bpp = (myImage->depth == 32) ? GL_RGBA : GL_RGB;
|
switch(myImage->depth)
|
||||||
int format = (myImage->depth == 32) ? GL_BGRA : GL_BGR;
|
{
|
||||||
glAssert(glTexImage2D(textureSlot, 0, bpp, myImage->width, myImage->height, 0, format, GL_UNSIGNED_BYTE, myImage->pixels));
|
case 32:
|
||||||
|
glAssert(glTexImage2D(textureSlot, 0, GL_RGBA, myImage->width, myImage->height, 0, GL_BGRA, GL_UNSIGNED_BYTE, myImage->pixels));
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
glAssert(glTexImage2D(textureSlot, 0, GL_RGB, myImage->width, myImage->height, 0, GL_BGR, GL_UNSIGNED_BYTE, myImage->pixels));
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
glAssert(glTexImage2D(textureSlot, 0, GL_R8, myImage->width, myImage->height, 0, GL_RED, GL_UNSIGNED_BYTE, myImage->pixels));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Texture::setWrap(GLint wrap)
|
void Texture::setWrap(GLint wrap)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user