Jump to content

  • Log In with Google      Sign In   
  • Create Account

OBJ texture coordinates problem (UVW unwrapped)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 tempvar   Members   -  Reputation: 152

Like
0Likes
Like

Posted 29 September 2012 - 03:09 AM

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.

Posted Image

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

Posted Image This is the texture on the object in 3ds max.

And in my program...

Posted Image
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.

Sponsor:

#2 clb   Members   -  Reputation: 1789

Like
0Likes
Like

Posted 29 September 2012 - 07:16 AM

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.
Me+PC=clb.demon.fi | C++ Math and Geometry library: MathGeoLib, test it live! | C++ Game Networking: kNet | 2D Bin Packing: RectangleBinPack | Use gcc/clang/emcc from VS: vs-tool | Resume+Portfolio | gfxapi, test it live!

#3 tempvar   Members   -  Reputation: 152

Like
0Likes
Like

Posted 29 September 2012 - 09:24 AM

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()[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++;
    } 
   }
  }





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS