Hello!
I writing small program in OpenGL, and I have problem ( textures are skew, and I dont know why, this model work in another obj viewer)
What I have:
http://img696.imageshack.us/i/obrazo.png/
What I want
http://img88.imageshack.us/i/obraz2d.jpg/
This code where I load texture:
bool success;
ILuint texId;
GLuint image;
ilGenImages(1, &texId);
ilBindImage(texId);
success = ilLoadImage((WCHAR*)fileName.c_str());
if(success)
{
    success = ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE); 
    if(!success)
    {   
        return false;
    }
}
else
{
    return false;
}
glGenTextures(1, &image);
glBindTexture(GL_TEXTURE_2D, image);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
  ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
  ilGetData()); 
ilDeleteImages(1, &texId); 
Code to load obj:
triangles.clear();
std::ifstream in;
std::string cmd;
in.open (fileName.c_str());
if (in.is_open())
{   
    while(!in.eof())
    {
        in>>cmd;
        if(cmd=="v")
        {
            Vector3d vector;
            in>>vector.x;
            in>>vector.y;
            in>>vector.z;
            points.push_back(vector);
        }
        if(cmd=="vt")
        {
            Vector2d texcord;
            in>>texcord.x;
            in>>texcord.y;
            texcords.push_back(texcord);
        }
        if(cmd=="vn")
        {
            Vector3d normal;
            in>>normal.x;
            in>>normal.y;
            in>>normal.z;
            normals.push_back(normal);
        }
        if(cmd=="f")
        {
            Triangle triangle;
            std::string str;
            std::string str1,str2,str3;
            std::string delimeter("/");
            int pos;
            int n;
            std::stringstream ss (std::stringstream::in | std::stringstream::out);
                in>>str;
                pos = str.find(delimeter);
                str1 = str.substr(0,pos);
                str2 = str.substr(pos+delimeter.length());
                pos = str2.find(delimeter);
                str3 = str2.substr(pos+delimeter.length());
                str2 = str2.substr(0,pos);
                ss<<str1;
                ss>>n;
                triangle.a= n-1;
                ss.clear();
                ss<<str3;
                ss>>n;
                triangle.an =n-1;
                ss.clear();
                ss<<str2;
                ss>>n;
                ss.clear();
                triangle.atc = n-1;
                in>>str;
                pos = str.find(delimeter);
                str1 = str.substr(0,pos);
                str2 = str.substr(pos+delimeter.length());
                pos = str2.find(delimeter);
                str3 = str2.substr(pos+delimeter.length());
                str2 = str2.substr(0,pos);
                ss<<str1;
                ss>>n;
                triangle.b= n-1;
                ss.clear();
                ss<<str3;
                ss>>n;
                triangle.bn =n-1;
                ss.clear();
                ss<<str2;
                ss>>n;
                ss.clear();
                triangle.btc = n-1;
                in>>str;
                pos = str.find(delimeter);
                str1 = str.substr(0,pos);
                str2 = str.substr(pos+delimeter.length());
                pos = str2.find(delimeter);
                str3 = str2.substr(pos+delimeter.length());
                str2 = str2.substr(0,pos);
                ss<<str1;
                ss>>n;
                triangle.c= n-1;
                ss.clear();
                ss<<str3;
                ss>>n;
                triangle.cn =n-1;
                ss.clear();
                ss<<str2;
                ss>>n;
                ss.clear();
                triangle.ctc = n-1;
            triangles.push_back(triangle);
        }
        cmd = "";
    }
    in.close(); 
    return true;     
}
return false;
Code to draw model:
    glEnable(GL_TEXTURE_2D);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
    glBindTexture(GL_TEXTURE_2D,image);
glBegin(GL_TRIANGLES);
    for(int i=0;i<triangles.size();i++)
    {       
        glTexCoord2f(texcords[triangles[i].ctc].x,
            texcords[triangles[i].ctc].y);
            glNormal3f(normals[triangles[i].cn].x,
                normals[triangles[i].cn].y,
                normals[triangles[i].cn].z);
            glVertex3f( points[triangles[i].c].x,
                points[triangles[i].c].y,
                points[triangles[i].c].z);
    glTexCoord2f(texcords[triangles[i].btc].x,
            texcords[triangles[i].btc].y);
            glNormal3f(normals[triangles[i].bn].x,
                normals[triangles[i].bn].y,
                normals[triangles[i].bn].z);
            glVertex3f( points[triangles[i].b].x,
                points[triangles[i].b].y,
                points[triangles[i].b].z);  
        glTexCoord2f(texcords[triangles[i].atc].x,
            texcords[triangles[i].atc].y);
            glNormal3f(normals[triangles[i].an].x,
                normals[triangles[i].an].y,
                normals[triangles[i].an].z);
            glVertex3f( points[triangles[i].a].x,
                points[triangles[i].a].y,
                points[triangles[i].a].z);
    }
glEnd();
    glDisable(GL_TEXTURE_2D);
Mayby someone find mistake in this