here is a milkshape3d model, it is drawn using triangles (NOT triangle strips or some variant) but yet somehow the number of vertices is LESS than the number of triangles when it should be more. Am I missing something? Cuz this doesn't make sense.

Printable View

- 12-26-2002Shadow12345can someone explain how this is possible
here is a milkshape3d model, it is drawn using triangles (NOT triangle strips or some variant) but yet somehow the number of vertices is LESS than the number of triangles when it should be more. Am I missing something? Cuz this doesn't make sense.

- 12-26-2002MrWizard
That looks correct to me. Lets take a simple cube for example. This cube has 8 vertices. Each side of the cube has 2 face ( or triangles ). So the 6 sides * 2 faces per side yields 12 triangles. So this is more triangles then vertices too. You are re-using vertices for different faces. Maybe this clears it up.

- 12-26-2002Sang-drax
If you draw the planes inside the cube too, you end up with 12 more triangles, yielding a total of 24 triangles with 8 vertices.

- 12-26-2002MrWizardQuote:

*Originally posted by Sang-drax*

**If you draw the planes inside the cube too, you end up with 12 more triangles, yielding a total of 24 triangles with 8 vertices.**

- 12-26-2002Shadow12345Quote:

That looks correct to me. Lets take a simple cube for example. This cube has 8 vertices. Each side of the cube has 2 face ( or triangles ). So the 6 sides * 2 faces per side yields 12 triangles. So this is more triangles then vertices too. You are re-using vertices for different faces. Maybe this clears it up.

EDIT:

The application draws like this:

loop through all the meshes

loop through each triangle

draw 3 vertices

the only explanation I can see is there is a lot of redraw going on, because it actually draws (numtris * 3) vertices but yet there are only 40 different ones. - 12-28-2002Leeman_s
well chucky....er i mean shadow, it DOES seem impossible. lol.

- 12-28-2002Jeremy G
Hrm, I use to use MilkShape3D at one time, but I never saw that it doesn't use triangle strips.

Im not sure how you determined the drawing process, perhaps you followed a some methods around till you found a drawVertex method?

It seems very possible and very likely that perhaps the vertex methods checks the vertex list for vertexs that are the same as the one being plotted, and if it is found, then the triangle strip is altered to to use the found vertex already in the buffer, and if not, plots a new and alters the triangle strip.

I would guess he has a pretty complicated method that rearranges triangle strips on the fly (that most likely took a while to write, but very worth the time). - 12-29-2002Polymorphic OOP
Shadow, it doesn't use strips or fans but it does reuse vertices

*in memory*. While it is true that each vertex has to be passed again for every triangle, the vertex is only stored once in memory and is refered to by a pointer by each face that uses it. That's the whole point of the "weld" function in Milkshape 3D -- if you make 2 different vertices that are in the same location, they are stored as two different vertices, but once you weld them, they become the same vertex.

It doesn't use strips or fans because that would require the program to be re-optimized whenever you added a face, etc. and it would make deleting faces more taxing. Most modeling environments don't optimize with strips or fans -- those are things that are optimized when you export it to another format to be used in a realtime application. Otherwise it makes things much too slow for the program to work with.

EDIT: Just noting that Milkshape 3D 1.6.5 came out at the beginning of December -- might wanna update! :) - 12-29-2002Eber Kain
It sounds to me like its using vertex arrays to me, the most efficient means of drawing when the data to be drawn might change.

- 12-29-2002Polymorphic OOPQuote:

It sounds to me like its using vertex arrays to me, the most efficient means of drawing when the data to be drawn might change.

EDIT: Not only that, but it would also require the storage of vertex pointers as well to keep track of which vertices are the same and which are just in the same spot, and then, every time you moved a vertex, you'd have to change the values of the coordinates for every single instance of that vertex in the array. It just isn't efficient here to use vertex arrays.