finished texture unit chapter (and therefore textures section)
This commit is contained in:
parent
5d149d8b3c
commit
deb2a7de0b
|
@ -157,6 +157,7 @@
|
||||||
<ClInclude Include="mesh\mesh.h" />
|
<ClInclude Include="mesh\mesh.h" />
|
||||||
<ClInclude Include="Shaders\Enums.h" />
|
<ClInclude Include="Shaders\Enums.h" />
|
||||||
<ClInclude Include="Shaders\Shader.h" />
|
<ClInclude Include="Shaders\Shader.h" />
|
||||||
|
<ClInclude Include="textures\Texture2D.h" />
|
||||||
<ClInclude Include="util\stb_image.h" />
|
<ClInclude Include="util\stb_image.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -50,6 +50,9 @@
|
||||||
<ClInclude Include="util\stb_image.h">
|
<ClInclude Include="util\stb_image.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="textures\Texture2D.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CopyFileToFolders Include="Shaders\default\default.frag" />
|
<CopyFileToFolders Include="Shaders\default\default.frag" />
|
||||||
|
|
BIN
src/Engine/images/awesomeface.png
Normal file
BIN
src/Engine/images/awesomeface.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 58 KiB |
|
@ -7,8 +7,8 @@
|
||||||
#include "shaders/Shader.h"
|
#include "shaders/Shader.h"
|
||||||
#include "util/stb_image.h"
|
#include "util/stb_image.h"
|
||||||
|
|
||||||
// Continue: https://learnopengl.com/Getting-started/Textures
|
// Continue: https://learnopengl.com/Getting-started/Transformations
|
||||||
// Chapter: Texture Units
|
// Chapter: Not started
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@ int main()
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
|
|
||||||
// TEXTURES
|
// TEXTURES
|
||||||
|
stbi_set_flip_vertically_on_load(true); // because an image has 0 at top of y axis and opengl expects it to be on the botton, so if this is omitted, the image will be flipped
|
||||||
int width, height, nrChannels;
|
int width, height, nrChannels;
|
||||||
unsigned char* image = stbi_load("images/container.jpg", &width, &height, &nrChannels, 0);
|
unsigned char* image = stbi_load("images/container.jpg", &width, &height, &nrChannels, 0);
|
||||||
if (!image)
|
if (!image)
|
||||||
|
@ -125,25 +126,33 @@ int main()
|
||||||
stbi_image_free(image);
|
stbi_image_free(image);
|
||||||
return -1; // it would be better to just use a default error image instead and make the error message a warning message instead
|
return -1; // it would be better to just use a default error image instead and make the error message a warning message instead
|
||||||
}
|
}
|
||||||
unsigned int textureID;
|
unsigned int textureID_container;
|
||||||
glGenTextures(1, &textureID);
|
glGenTextures(1, &textureID_container);
|
||||||
glBindTexture(GL_TEXTURE_2D, textureID);
|
glBindTexture(GL_TEXTURE_2D, textureID_container);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
|
||||||
glGenerateMipmap(GL_TEXTURE_2D);
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
stbi_image_free(image);
|
stbi_image_free(image);
|
||||||
|
|
||||||
GLfloat texCoords[] = {
|
image = stbi_load("images/awesomeface.png", &width, &height, &nrChannels, 0);
|
||||||
0.0f, 0.0f, // lower-left corner
|
if (!image)
|
||||||
1.0f, 0.0f, // lower-right corner
|
{
|
||||||
0.5f, 1.0f // top-center corner
|
std::cerr << "ERROR::IO::LOAD_TEXTURE";
|
||||||
};
|
stbi_image_free(image);
|
||||||
|
return -1; // it would be better to just use a default error image instead and make the error message a warning message instead
|
||||||
|
}
|
||||||
|
unsigned int textureID_face;
|
||||||
|
glGenTextures(1, &textureID_face);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, textureID_face);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
|
||||||
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
stbi_image_free(image);
|
||||||
|
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
|
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
|
||||||
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // use nearest neighbour when zooming out
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // use nearest neighbour when zooming out
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // use bilinear when zooming in
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // use bilinear when zooming in
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// main loop
|
// main loop
|
||||||
while(!glfwWindowShouldClose(window))
|
while(!glfwWindowShouldClose(window))
|
||||||
{
|
{
|
||||||
|
@ -153,11 +162,17 @@ int main()
|
||||||
ProcessInput(window);
|
ProcessInput(window);
|
||||||
|
|
||||||
shader->Use();
|
shader->Use();
|
||||||
|
shader->setInt("ourTexture1", 0);
|
||||||
|
shader->setInt("ourTexture2", 1);
|
||||||
//float time = glfwGetTime();
|
//float time = glfwGetTime();
|
||||||
//float greenValue = (sin(time) / 2.0f) + 0.5f;
|
//float greenValue = (sin(time) / 2.0f) + 0.5f;
|
||||||
//shader->setFloat("ourColour", 0.0f, greenValue, 0.0f, 0.0f);
|
//shader->setFloat("ourColour", 0.0f, greenValue, 0.0f, 0.0f);
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, textureID);
|
glActiveTexture(GL_TEXTURE0); // before binding texture, activate correct textre Unit (some drivers might show nothing if this is omitted)
|
||||||
|
glBindTexture(GL_TEXTURE_2D, textureID_container);
|
||||||
|
glActiveTexture(GL_TEXTURE0 + 1); // GL_TEXTURE0 + 1 == GL_TEXTURE1, this means looping over multiple units is easily possible
|
||||||
|
glBindTexture(GL_TEXTURE_2D, textureID_face);
|
||||||
|
|
||||||
glBindVertexArray(vertexArrayObject);
|
glBindVertexArray(vertexArrayObject);
|
||||||
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
|
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,10 @@ out vec4 FragColor;
|
||||||
in vec3 ourColour;
|
in vec3 ourColour;
|
||||||
in vec2 texCoord;
|
in vec2 texCoord;
|
||||||
|
|
||||||
uniform sampler2D ourTexture;
|
uniform sampler2D ourTexture1;
|
||||||
|
uniform sampler2D ourTexture2;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
FragColor = texture(ourTexture, texCoord) * vec4(ourColour, 1.0);
|
FragColor = mix(texture(ourTexture1, texCoord), texture(ourTexture2, texCoord), 0.2) * vec4(ourColour, 1.0);
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user