OBJ texture coordinates problem (UVW unwrapped)

Started by
1 comment, last by tempvar 11 years, 6 months ago
Hey,

I'm having some troubles with my textures but i'm not sure if its my GLSL shader, or my actual loading of the UV coordinates that is messed up. My model is UVW unwrapped in 3ds max and i've used that to texture it.

dng2d.png

Just made a simple texture to test it out on this model.

5w2KV.png This is the texture on the object in 3ds max.

And in my program...

Q1SaE.png
The texture is quite messed up.

So i'm wondering if i've loaded the UV's incorrectly or my shader is wrong.

Vertex Shader:


#version 400
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexNormal;
layout (location = 2) in vec2 TextureCoordinate;
out vec2 TexCoord;
uniform mat4 MVP;
void main()
{
TexCoord = TextureCoordinate;
gl_Position = MVP * vec4(VertexPosition,1.0);
}



Frag Shader:


#version 400
in vec2 TexCoord;
layout( location = 0 ) out vec4 FragColor;
uniform sampler2D myTextureSampler;
void main()
{
FragColor = texture(myTextureSampler, TexCoord);
}


Thank you.
Advertisement
I'm guessing here since you didn't post complete code, but I assume that since the image you posted is 343x270 in size, your loader loaded it to 512x512 and stretched the pixels, or didn't stretch them, and you now get that kind of artifact. There is nothing relevant in the shader code, paste your image load and upload code if you can't figure it out.
Thanks for the reply, I've confirmed that the data my obj loader is loading in is correct (the position, normal and uv arrays have the correct data in them). What i'm doing after that is trying to create Vertexes out of the data and put them into an interleaved VBO. I'm also using indexes to try and reduce any duplicate vertices, which may or may not be causing the problem.

This is the vertex structure i'm using

struct Vertex
{
float x, y, z;
float nx, ny, nz;
float s0, t0;
};


Here i'm basically looping over the loaded in OBJ data and attempting to create an array (vector) of Vertexes and a vector of indices.


for (int i = 0; i < (signed)modelData.getFaceData().size(); i++)
{
Vertex vertex[3];
for (int j = 0; j < 3; j++)
{
int vertexIndex = modelData.getFaceData().vIndex[j] - vertexOffset - 1;
int normalIndex = modelData.getFaceData().vnIndex[j] - normalOffset - 1;
int textureIndex = modelData.getFaceData().vtIndex[j] - textureOffset - 1;
vertex[j].x = modelData.getVertexData()[vertexIndex].x;
vertex[j].y = modelData.getVertexData()[vertexIndex].y;
vertex[j].z = modelData.getVertexData()[vertexIndex].z;
vertex[j].nx = modelData.getNormalData()[normalIndex].x;
vertex[j].ny = modelData.getNormalData()[normalIndex].y;
vertex[j].nz = modelData.getNormalData()[normalIndex].z;
if (textureIndex != -1)
{
vertex[j].s0 = modelData.getTexData()[textureIndex].u;
vertex[j].t0 = modelData.getTexData()[textureIndex].v;
}
int index = checkForDuplication(vertex[j]);
if (index != -1)
{
m_ibo.pushIndex(index);
}
else
{
m_ibo.pushIndex(counter);
m_vertices.push_back(vertex[j]);
counter++;
}
}
}

This topic is closed to new replies.

Advertisement