# [ACCEPTED]-Converting quadriladerals in an OBJ file into triangles?-wavefront

If you have 4 indices, e.g.:

```
0 1 2 3
```

The division 25 into two triangles would be one with the 24 first 3 indices, and one with the first, third, and 23 fourth. In this example:

```
0 1 2
0 2 3
```

Let's try some ASCII 22 art to illustrate this:

```
3-------2
| /|
| / |
| / |
|/ |
0-------1
```

Here you see `0 1 2 3`

as 21 the quad, `0 1 2`

as the first triangle (bottom-right), and 20 `0 2 3`

as the second triangle (top left).

More 19 generally, for faces with `n`

vertices, you 18 generate triangles:

```
0 (i) (i + 1) [for i in 1..(n - 2)]
```

If you don't insist on 17 separate triangles, you can also use `GL_TRIANGLE_FAN`

primitives, which 16 are still in core OpenGL. That way, you 15 can draw any convex polygon with a triangle 14 fan, using the original sequence of indices. So 13 a triangle fan with vertex sequence `0 1 2 3`

describes 12 the quad in this case, and it very easily 11 generalizes to faces with more than 4 vertices.

Edit: Since 10 you still appear to have problems, let's 9 see how this applies to the example in your 8 post. I'll list the original index sequence 7 of the quad for each face, and the index 6 sequence for the two triangles after splitting 5 the quad.

```
f 1 2 3 4 --> (1 2 3) (1 3 4)
f 8 7 6 5 --> (8 7 6) (8 6 5)
f 4 3 7 8 --> (4 3 7) (4 7 8)
f 5 1 4 8 --> (5 1 4) (5 4 8)
f 5 6 2 1 --> (5 6 2) (5 2 1)
f 2 6 7 3 --> (2 6 7) (2 7 3)
```

That looks correct to me when I 4 draw the cube. Remember to subtract 1 from 3 the indices for your use, since these are 2 1-based indices, and you will almost certainly 1 need 0-based indices.

Writing my own obj loader and reading the 8 spec very carefully, the details on the 7 'f' parameter are very vague, especially 6 seeing some files contain 'f' lines with 5 > 4 arguments on them.

Turns out that these 4 are actually a triangle strip in an odd 3 order. Correct conversion to triangles is 2 as follows (psuedo code):

```
n = 0;
triangles[n++] = [values[0], values[1], values[2]];
for(i = 3; i < count(values); ++i)
triangles[n++] = [
values[i - 3],
values[i - 1],
values[i]
];
```

Example:

```
f: A B C D E F G
```

Would be 1 the following 5 triangles:

```
A B C
A C D
B D E
C E F
D F G
```

More Related questions

We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.