A triangle needs three vertices, but you are only emitting one vertex before closing the triangle. At the very least, you need to put the glBegin/glEnd around the inner for-loop so that all three vertices are emitted for one triangle. Furthermore, the constant is called GL_TRIANGLES, not GL_TRIANGLE; observe the plural form, so you can emit as many triangles as necessary before closing the series of triangles.

glBegin(GL_TRIANGLES); for(int i=0;i<vertices.size();i+=3) { for(int j=0;j<3;j++) { ... glNormal3fv(&n.x); glTexCoord2fv(&t.x); glVertex3fv(&v.x); } } glEnd();