Sign in to follow this  
tempvar

OBJ texture coordinates problem (UVW unwrapped)

Recommended Posts

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.

[img]http://i.imgur.com/dng2d.png[/img]

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

[img]http://i.imgur.com/5w2KV.png[/img] This is the texture on the object in 3ds max.

And in my program...

[img]http://i.imgur.com/Q1SaE.png[/img]
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:

[CODE]
#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);
}
[/CODE]


Frag Shader:

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

Thank you.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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
[CODE]
struct Vertex
{
float x, y, z;
float nx, ny, nz;
float s0, t0;
};
[/CODE]

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.

[CODE]
for (int i = 0; i < (signed)modelData.getFaceData().size(); i++)
{
Vertex vertex[3];
for (int j = 0; j < 3; j++)
{
int vertexIndex = modelData.getFaceData()[i].vIndex[j] - vertexOffset - 1;
int normalIndex = modelData.getFaceData()[i].vnIndex[j] - normalOffset - 1;
int textureIndex = modelData.getFaceData()[i].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++;
}
}
}
[/CODE]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this