I've made a .obj reader in c++ and I've tried rendering some models. I've got the whole concept from here: https://www.youtube.com/watch?v=KMWUjNE0fYI&list=PLRIWtICgwaX0u7Rf9zkZhLoLuZVfUksDP&index=9
So I've tried to copy the export settings in blender what the guy used in the video (I'm not experienced in modelling so I had troubles because I have a newer version) and I've split every edge so they staied sharp even with the smooth shader. What my model looks like in blender:

I'm not sure if this is a texture or lighting bug. The models that the guy provides in the video work just fine.
Edit:
My drawing code is this:
shader->Enable();
shader->SetUniformMat4f("vw_matrix", viewMatrix);
m_Model->GetVAO().Bind();
m_Model->GetIBO().Bind();
glActiveTexture(GL_TEXTURE0);
m_Texture->Bind();
glDrawElements(GL_TRIANGLES, m_Model->GetIBO().GetCount(), GL_UNSIGNED_INT, 0);
m_Texture->Unbind();
m_Model->GetVAO().Unbind();
m_Model->GetIBO().Unbind();
shader->Disable();
Export settings:
- Write Normals
- Include UVs
- Triangulate faces
- Objects as OBJ objects
Edit2:
I've added a pic how the model looks without edge split (above).
My vertex shader:
#version 400 core
in vec3 position;
in vec2 textureCoords;
in vec3 normal;
out vec2 pass_textureCoords;
out vec3 surfaceNormal;
out vec3 toLightVector;
uniform mat4 pr_matrix = mat4(1.0);
uniform mat4 vw_matrix = mat4(1.0);
uniform mat4 ml_matrix = mat4(1.0);
uniform vec3 lightPosition;
void main(void)
{
vec4 worldPosition = ml_matrix * vec4(position, 1.0);
gl_Position = pr_matrix * vw_matrix * worldPosition;
pass_textureCoords = textureCoords;
surfaceNormal = (ml_matrix * vec4(normal, 0.0)).xyz;
toLightVector = lightPosition - worldPosition.xyz;
}