3DS loader - vertex duplicates

Hi,

I’ve got simple sphere model as a 3ds.



Tried converting to jME and it works ok, except that certain vertices appear to be duplicated and therefore redundant. This is actually causing me some problems in a little vertex manipulation routine I’m experimenting with.

Any clues?

Should vertices that have the same co-ord be a single entry?

eg: see vertex 2 and 4 in the list below…there are quite a few others.



I tried converting to ASE and checking if the jME file from that conversion has the same probelm but the ASE importer fails - see other post.

http://www.mojomonkeycoding.com/jmeforum/viewtopic.php?p=9932#9932



Node Child 0 name = TDS Scene

TriMesh Child 0 name = sfera (com.jme.scene.TriMesh)

mesh indices = [I@133796<br /> Triangle 1 = 0 , 1 , 2<br /> Triangle 2 = 3 , 4 , 5<br /> Triangle 3 = 6 , 7 , 1<br /> Triangle 4 = 8 , 9 , 5<br /> Triangle 5 = 0 , 8 , 10<br /> Triangle 6 = 11 , 12 , 13<br /> Triangle 7 = 3 , 13 , 8<br /> Triangle 8 = 12 , 8 , 14<br /> Triangle 9 = 15 , 14 , 16<br /> Triangle 10 = 17 , 18 , 19<br /> Triangle 11 = 3 , 19 , 14<br /> Triangle 12 = 16 , 14 , 20<br /> Triangle 13 = 3 , 21 , 20<br /> Triangle 14 = 22 , 20 , 23<br /> Triangle 15 = 24 , 25 , 21<br /> Triangle 16 = 20 , 26 , 25<br /> Triangle 17 = 3 , 7 , 21<br /> Triangle 18 = 27 , 21 , 28<br /> Triangle 19 = 6 , 29 , 5<br /> Triangle 20 = 21 , 5 , 29<br /> Triangle 21 = 27 , 29 , 30<br /> Triangle 22 = 31 , 30 , 32<br /> Triangle 23 = 33 , 32 , 29<br /> Triangle 24 = 34 , 29 , 32<br /> Triangle 25 = 24 , 34 , 35<br /> Triangle 26 = 36 , 35 , 37<br /> Triangle 27 = 38 , 37 , 34<br /> Triangle 28 = 35 , 34 , 37<br /> Triangle 29 = 22 , 25 , 39<br /> Triangle 30 = 40 , 41 , 42<br /> Triangle 31 = 24 , 35 , 25<br /> Triangle 32 = 39 , 25 , 35<br /> Triangle 33 = 22 , 39 , 43<br /> Triangle 34 = 44 , 45 , 46<br /> Triangle 35 = 47 , 46 , 39<br /> Triangle 36 = 43 , 39 , 48<br /> Triangle 37 = 49 , 48 , 50<br /> Triangle 38 = 51 , 50 , 52<br /> Triangle 39 = 53 , 52 , 48<br /> Triangle 40 = 54 , 48 , 52<br /> Triangle 41 = 55 , 52 , 56<br /> Triangle 42 = 38 , 56 , 57<br /> Triangle 43 = 53 , 37 , 52<br /> Triangle 44 = 56 , 52 , 37<br /> Triangle 45 = 55 , 56 , 58<br /> Triangle 46 = 59 , 58 , 60<br /> Triangle 47 = 38 , 60 , 56<br /> Triangle 48 = 61 , 56 , 62<br /> Triangle 49 = 51 , 63 , 64<br /> Triangle 50 = 65 , 66 , 67<br /> Triangle 51 = 68 , 69 , 63<br /> Triangle 52 = 66 , 63 , 69<br /> Triangle 53 = 70 , 69 , 71<br /> Triangle 54 = 0 , 72 , 73<br /> Triangle 55 = 68 , 74 , 69<br /> Triangle 56 = 72 , 69 , 74<br /> Triangle 57 = 0 , 74 , 9<br /> Triangle 58 = 6 , 9 , 75<br /> Triangle 59 = 68 , 76 , 74<br /> Triangle 60 = 9 , 74 , 76<br /> Triangle 61 = 68 , 60 , 75<br /> Triangle 62 = 6 , 76 , 32<br /> Triangle 63 = 38 , 32 , 60<br /> Triangle 64 = 76 , 60 , 32<br /> Triangle 65 = 11 , 77 , 78<br /> Triangle 66 = 0 , 78 , 72<br /> Triangle 67 = 70 , 72 , 77<br /> Triangle 68 = 78 , 79 , 72<br /> Triangle 69 = 15 , 80 , 81<br /> Triangle 70 = 65 , 81 , 82<br /> Triangle 71 = 44 , 82 , 83<br /> Triangle 72 = 81 , 84 , 82<br /> Triangle 73 = 15 , 16 , 83<br /> Triangle 74 = 44 , 83 , 43<br /> Triangle 75 = 22 , 43 , 16<br /> Triangle 76 = 83 , 16 , 43<br /> Triangle 77 = 51 , 66 , 54<br /> Triangle 78 = 44 , 54 , 82<br /> Triangle 79 = 65 , 82 , 66<br /> Triangle 80 = 54 , 66 , 82<br /> Vertex = 0 = com.jme.math.Vector3f [X=-0.262866, Y=0.0, Z=0.425325]

Vertex = 1 = com.jme.math.Vector3f [X=0.0, Y=0.0, Z=0.5]

Vertex = 2 = com.jme.math.Vector3f [X=-0.154509, Y=0.25, Z=0.404509]

Vertex = 3 = com.jme.math.Vector3f [X=0.0, Y=0.425325, Z=0.262866]

Vertex = 4 = com.jme.math.Vector3f [X=-0.154509, Y=0.25, Z=0.404509]

Vertex = 5 = com.jme.math.Vector3f [X=0.154509, Y=0.25, Z=0.404509]

Vertex = 6 = com.jme.math.Vector3f [X=0.262866, Y=0.0, Z=0.425325]

Vertex = 7 = com.jme.math.Vector3f [X=0.154509, Y=0.25, Z=0.404509]

Vertex = 8 = com.jme.math.Vector3f [X=-0.154509, Y=0.25, Z=0.404509]

Vertex = 9 = com.jme.math.Vector3f [X=0.0, Y=0.0, Z=0.5]

Vertex = 10 = com.jme.math.Vector3f [X=-0.404508, Y=0.154508, Z=0.25]

Vertex = 11 = com.jme.math.Vector3f [X=-0.425325, Y=0.262866, Z=0.0]

Vertex = 12 = com.jme.math.Vector3f [X=-0.404508, Y=0.154508, Z=0.25]

Vertex = 13 = com.jme.math.Vector3f [X=-0.25, Y=0.404508, Z=0.154509]

Vertex = 14 = com.jme.math.Vector3f [X=-0.25, Y=0.404508, Z=0.154509]

Vertex = 15 = com.jme.math.Vector3f [X=-0.425325, Y=0.262866, Z=0.0]

Vertex = 16 = com.jme.math.Vector3f [X=-0.25, Y=0.404508, Z=-0.154508]

Vertex = 17 = com.jme.math.Vector3f [X=0.0, Y=0.425325, Z=-0.262866]

Vertex = 18 = com.jme.math.Vector3f [X=-0.25, Y=0.404508, Z=-0.154508]

Vertex = 19 = com.jme.math.Vector3f [X=0.0, Y=0.5, Z=0.0]

Vertex = 20 = com.jme.math.Vector3f [X=0.0, Y=0.5, Z=0.0]

Vertex = 21 = com.jme.math.Vector3f [X=0.25, Y=0.404508, Z=0.154509]

Vertex = 22 = com.jme.math.Vector3f [X=0.0, Y=0.425325, Z=-0.262866]

Vertex = 23 = com.jme.math.Vector3f [X=0.25, Y=0.404508, Z=-0.154508]

Vertex = 24 = com.jme.math.Vector3f [X=0.425325, Y=0.262866, Z=0.0]

Vertex = 25 = com.jme.math.Vector3f [X=0.25, Y=0.404508, Z=-0.154508]

Vertex = 26 = com.jme.math.Vector3f [X=0.25, Y=0.404508, Z=0.154509]

Vertex = 27 = com.jme.math.Vector3f [X=0.425325, Y=0.262866, Z=0.0]

Vertex = 28 = com.jme.math.Vector3f [X=0.404509, Y=0.154508, Z=0.25]

Vertex = 29 = com.jme.math.Vector3f [X=0.404509, Y=0.154508, Z=0.25]

Vertex = 30 = com.jme.math.Vector3f [X=0.5, Y=0.0, Z=0.0]

Vertex = 31 = com.jme.math.Vector3f [X=0.425325, Y=-0.262866, Z=0.0]

Vertex = 32 = com.jme.math.Vector3f [X=0.404509, Y=-0.154508, Z=0.25]

Vertex = 33 = com.jme.math.Vector3f [X=0.262866, Y=0.0, Z=0.425325]

Vertex = 34 = com.jme.math.Vector3f [X=0.5, Y=0.0, Z=0.0]

Vertex = 35 = com.jme.math.Vector3f [X=0.404509, Y=0.154508, Z=-0.25]

Vertex = 36 = com.jme.math.Vector3f [X=0.262866, Y=0.0, Z=-0.425325]

Vertex = 37 = com.jme.math.Vector3f [X=0.404509, Y=-0.154508, Z=-0.25]

Vertex = 38 = com.jme.math.Vector3f [X=0.425325, Y=-0.262866, Z=0.0]

Vertex = 39 = com.jme.math.Vector3f [X=0.154509, Y=0.25, Z=-0.404508]

Vertex = 40 = com.jme.math.Vector3f [X=0.262866, Y=0.0, Z=-0.425325]

Vertex = 41 = com.jme.math.Vector3f [X=0.154509, Y=0.25, Z=-0.404508]

Vertex = 42 = com.jme.math.Vector3f [X=0.404509, Y=0.154508, Z=-0.25]

Vertex = 43 = com.jme.math.Vector3f [X=-0.154509, Y=0.25, Z=-0.404508]

Vertex = 44 = com.jme.math.Vector3f [X=-0.262866, Y=0.0, Z=-0.425325]

Vertex = 45 = com.jme.math.Vector3f [X=-0.154509, Y=0.25, Z=-0.404508]

Vertex = 46 = com.jme.math.Vector3f [X=0.0, Y=0.0, Z=-0.5]

Vertex = 47 = com.jme.math.Vector3f [X=0.262866, Y=0.0, Z=-0.425325]

Vertex = 48 = com.jme.math.Vector3f [X=0.0, Y=0.0, Z=-0.5]

Vertex = 49 = com.jme.math.Vector3f [X=-0.262866, Y=0.0, Z=-0.425325]

Vertex = 50 = com.jme.math.Vector3f [X=-0.154509, Y=-0.25, Z=-0.404508]

Vertex = 51 = com.jme.math.Vector3f [X=0.0, Y=-0.425325, Z=-0.262866]

Vertex = 52 = com.jme.math.Vector3f [X=0.154509, Y=-0.25, Z=-0.404508]

Vertex = 53 = com.jme.math.Vector3f [X=0.262866, Y=0.0, Z=-0.425325]

Vertex = 54 = com.jme.math.Vector3f [X=-0.154509, Y=-0.25, Z=-0.404508]

Vertex = 55 = com.jme.math.Vector3f [X=0.0, Y=-0.425325, Z=-0.262866]

Vertex = 56 = com.jme.math.Vector3f [X=0.25, Y=-0.404508, Z=-0.154508]

Vertex = 57 = com.jme.math.Vector3f [X=0.404509, Y=-0.154508, Z=-0.25]

Vertex = 58 = com.jme.math.Vector3f [X=0.0, Y=-0.5, Z=0.0]

Vertex = 59 = com.jme.math.Vector3f [X=0.0, Y=-0.425325, Z=0.262866]

Vertex = 60 = com.jme.math.Vector3f [X=0.25, Y=-0.404508, Z=0.154509]

Vertex = 61 = com.jme.math.Vector3f [X=0.0, Y=-0.5, Z=0.0]

Vertex = 62 = com.jme.math.Vector3f [X=0.25, Y=-0.404508, Z=0.154509]

Vertex = 63 = com.jme.math.Vector3f [X=0.0, Y=-0.5, Z=0.0]

Vertex = 64 = com.jme.math.Vector3f [X=-0.25, Y=-0.404508, Z=-0.154508]

Vertex = 65 = com.jme.math.Vector3f [X=-0.425325, Y=-0.262866, Z=0.0]

Vertex = 66 = com.jme.math.Vector3f [X=-0.25, Y=-0.404508, Z=-0.154508]

Vertex = 67 = com.jme.math.Vector3f [X=-0.25, Y=-0.404508, Z=0.154509]

Vertex = 68 = com.jme.math.Vector3f [X=0.0, Y=-0.425325, Z=0.262866]

Vertex = 69 = com.jme.math.Vector3f [X=-0.25, Y=-0.404508, Z=0.154509]

Vertex = 70 = com.jme.math.Vector3f [X=-0.425325, Y=-0.262866, Z=0.0]

Vertex = 71 = com.jme.math.Vector3f [X=-0.404508, Y=-0.154508, Z=0.25]

Vertex = 72 = com.jme.math.Vector3f [X=-0.404508, Y=-0.154508, Z=0.25]

Vertex = 73 = com.jme.math.Vector3f [X=-0.154509, Y=-0.25, Z=0.404509]

Vertex = 74 = com.jme.math.Vector3f [X=-0.154509, Y=-0.25, Z=0.404509]

Vertex = 75 = com.jme.math.Vector3f [X=0.154509, Y=-0.25, Z=0.404509]

Vertex = 76 = com.jme.math.Vector3f [X=0.154509, Y=-0.25, Z=0.404509]

Vertex = 77 = com.jme.math.Vector3f [X=-0.5, Y=0.0, Z=0.0]

Vertex = 78 = com.jme.math.Vector3f [X=-0.404508, Y=0.154508, Z=0.25]

Vertex = 79 = com.jme.math.Vector3f [X=-0.5, Y=0.0, Z=0.0]

Vertex = 80 = com.jme.math.Vector3f [X=-0.404508, Y=0.154508, Z=-0.25]

Vertex = 81 = com.jme.math.Vector3f [X=-0.5, Y=0.0, Z=0.0]

Vertex = 82 = com.jme.math.Vector3f [X=-0.404508, Y=-0.154508, Z=-0.25]

Vertex = 83 = com.jme.math.Vector3f [X=-0.404508, Y=0.154508, Z=-0.25]

Vertex = 84 = com.jme.math.Vector3f [X=-0.404508, Y=0.154508, Z=-0.25]

<scene >

<node name=“TDS Scene” >

<mesh name=“sfera” >

<vertex data="-0.262866 0.0 0.425325 0.0 0.0 0.5 -0.154509 0.25 0.404509 0.0 0.425325 0.262866 -0.154509 0.25 0.404509 0.154509 0.25 0.404509 0.262866 0.0 0.425325 0.154509 0.25 0.404509 -0.154509 0.25 0.404509 0.0 0.0 0.5 -0.404508 0.154508 0.25 -0.425325 0.262866 0.0 -0.404508 0.154508 0.25 -0.25 0.404508 0.154509 -0.25 0.404508 0.154509 -0.425325 0.262866 0.0 -0.25 0.404508 -0.154508 0.0 0.425325 -0.262866 -0.25 0.404508 -0.154508 0.0 0.5 0.0 0.0 0.5 0.0 0.25 0.404508 0.154509 0.0 0.425325 -0.262866 0.25 0.404508 -0.154508 0.425325 0.262866 0.0 0.25 0.404508 -0.154508 0.25 0.404508 0.154509 0.425325 0.262866 0.0 0.404509 0.154508 0.25 0.404509 0.154508 0.25 0.5 0.0 0.0 0.425325 -0.262866 0.0 0.404509 -0.154508 0.25 0.262866 0.0 0.425325 0.5 0.0 0.0 0.404509 0.154508 -0.25 0.262866 0.0 -0.425325 0.404509 -0.154508 -0.25 0.425325 -0.262866 0.0 0.154509 0.25 -0.404508 0.262866 0.0 -0.425325 0.154509 0.25 -0.404508 0.404509 0.154508 -0.25 -0.154509 0.25 -0.404508 -0.262866 0.0 -0.425325 -0.154509 0.25 -0.404508 0.0 0.0 -0.5 0.262866 0.0 -0.425325 0.0 0.0 -0.5 -0.262866 0.0 -0.425325 -0.154509 -0.25 -0.404508 0.0 -0.425325 -0.262866 0.154509 -0.25 -0.404508 0.262866 0.0 -0.425325 -0.154509 -0.25 -0.404508 0.0 -0.425325 -0.262866 0.25 -0.404508 -0.154508 0.404509 -0.154508 -0.25 0.0 -0.5 0.0 0.0 -0.425325 0.262866 0.25 -0.404508 0.154509 0.0 -0.5 0.0 0.25 -0.404508 0.154509 0.0 -0.5 0.0 -0.25 -0.404508 -0.154508 -0.425325 -0.262866 0.0 -0.25 -0.404508 -0.154508 -0.25 -0.404508 0.154509 0.0 -0.425325 0.262866 -0.25 -0.404508 0.154509 -0.425325 -0.262866 0.0 -0.404508 -0.154508 0.25 -0.404508 -0.154508 0.25 -0.154509 -0.25 0.404509 -0.154509 -0.25 0.404509 0.154509 -0.25 0.404509 0.154509 -0.25 0.404509 -0.5 0.0 0.0 -0.404508 0.154508 0.25 -0.5 0.0 0.0 -0.404508 0.154508 -0.25 -0.5 0.0 0.0 -0.404508 -0.154508 -0.25 -0.404508 0.154508 -0.25 -0.404508 0.154508 -0.25" >

</vertex>

<normal data="-0.52573293 0.0 0.85064965 0.0 5.2818185E-9 1.0 -0.30901846 0.4999995 0.8090168 0.0 0.8506512 0.5257305 -0.30901843 0.49999946 0.8090168 0.3090178 0.49999958 0.809017 0.5257315 0.0 0.85065055 0.30901778 0.49999955 0.809017 -0.30901843 0.4999995 0.8090168 0.0 0.0 1.0 -0.80901754 0.30901617 0.49999967 -0.8506505 0.52573156 -6.3172514E-8 -0.80901754 0.3090162 0.49999967 -0.5000006 0.80901676 0.30901688 -0.50000054 0.80901676 0.30901685 -0.8506505 0.52573156 -6.9489765E-8 -0.5000006 0.80901664 -0.30901688 -3.1586254E-9 0.85065055 -0.5257314 -0.50000054 0.8090167 -0.3090169 -2.640912E-9 1.0 3.1690945E-8 -5.281824E-9 1.0 3.1690945E-8 0.5000001 0.8090172 0.30901647 0.0 0.85065055 -0.5257314 0.5000001 0.8090172 -0.3090165 0.85065013 0.5257322 -5.6855235E-8 0.5000001 0.8090171 -0.3090165 0.50000006 0.80901724 0.30901644 0.85065013 0.5257322 -6.3172486E-8 0.8090175 0.30901694 0.49999928 0.8090175 0.3090169 0.49999925 1.0 0.0 2.6409097E-9 0.85065013 -0.5257322 -6.633111E-8 0.8090175 -0.3090169 0.49999925 0.52573156 0.0 0.85065055 1.0 0.0 0.0 0.809017 0.30901784 -0.49999958 0.52573097 -6.3172476E-9 -0.85065085 0.809017 -0.30901787 -0.49999958 0.85065013 -0.5257322 -6.3172486E-8 0.30901736 0.5000004 -0.80901664 0.52573097 0.0 -0.85065085 0.30901733 0.50000036 -0.80901664 0.809017 0.30901787 -0.49999958 -0.309018 0.50000036 -0.80901647 -0.5257324 0.0 -0.85065 -0.30901796 0.50000036 -0.80901647 0.0 -2.6409117E-9 -1.0 0.52573097 0.0 -0.85065097 0.0 0.0 -1.0 -0.5257324 -3.1586251E-9 -0.85065 -0.309018 -0.50000036 -0.80901647 -6.3172516E-9 -0.85065067 -0.5257314 0.30901733 -0.5000004 -0.80901664 0.52573097 -6.3172476E-9 -0.85065097 -0.30901796 -0.5000003 -0.80901647 0.0 -0.85065067 -0.5257314 0.5000001 -0.8090172 -0.3090165 0.80901694 -0.30901784 -0.49999958 -2.640912E-9 -1.0 3.1690945E-8 -3.1586236E-9 -0.8506512 0.5257305 0.5000001 -0.8090172 0.30901647 -5.281824E-9 -1.0 3.1690945E-8 0.50000006 -0.80901724 0.30901644 0.0 -1.0 3.1690945E-8 -0.50000054 -0.8090167 -0.3090169 -0.8506505 -0.52573156 -6.9489765E-8 -0.50000054 -0.80901664 -0.30901688 -0.50000054 -0.80901676 0.30901688 0.0 -0.8506512 0.5257305 -0.5000006 -0.80901676 0.30901688 -0.8506505 -0.52573156 -6.3172514E-8 -0.8090175 -0.30901614 0.49999964 -0.8090175 -0.30901617 0.49999967 -0.30901843 -0.4999995 0.8090168 -0.30901846 -0.4999995 0.8090168 0.30901778 -0.49999955 0.809017 0.3090178 -0.49999958 0.809017 -1.0 0.0 2.6409122E-9 -0.8090175 0.30901617 0.49999967 -1.0 0.0 0.0 -0.809017 0.3090171 -0.5 -1.0 0.0 5.2818243E-9 -0.809017 -0.30901706 -0.5 -0.809017 0.30901706 -0.5 -0.809017 0.3090171 -0.50000006" >

</normal>

<color >

</color>

<texturecoords data="" >

</texturecoords>

<texturecoords texindex=“1” data="" >

</texturecoords>

<texturecoords texindex=“2” data="" >

</texturecoords>

<texturecoords texindex=“3” data="" >

</texturecoords>

<index data=“0 1 2 3 4 5 6 7 1 8 9 5 0 8 10 11 12 13 3 13 8 12 8 14 15 14 16 17 18 19 3 19 14 16 14 20 3 21 20 22 20 23 24 25 21 20 26 25 3 7 21 27 21 28 6 29 5 21 5 29 27 29 30 31 30 32 33 32 29 34 29 32 24 34 35 36 35 37 38 37 34 35 34 37 22 25 39 40 41 42 24 35 25 39 25 35 22 39 43 44 45 46 47 46 39 43 39 48 49 48 50 51 50 52 53 52 48 54 48 52 55 52 56 38 56 57 53 37 52 56 52 37 55 56 58 59 58 60 38 60 56 61 56 62 51 63 64 65 66 67 68 69 63 66 63 69 70 69 71 0 72 73 68 74 69 72 69 74 0 74 9 6 9 75 68 76 74 9 74 76 68 60 75 6 76 32 38 32 60 76 60 32 11 77 78 0 78 72 70 72 77 78 79 72 15 80 81 65 81 82 44 82 83 81 84 82 15 16 83 44 83 43 22 43 16 83 16 43 51 66 54 44 54 82 65 82 66 54 66 82” >

</index>

<materialstate diffuse=“0.7529412 0.7529412 0.7529412 1.0” ambient=“0.11764706 0.11764706 0.11764706 1.0” emissive=“0.0 0.0 0.0 1.0” specular=“0.7529412 0.7529412 0.7529412 1.0” shiny=“25.6” alpha=“0.0” >

</materialstate>

</mesh>

</node>

</scene>

I get lost in all that data, asd I am not a coder, sonic.



But the fact is that *.3ds (just like md2, md3 too) do not support 2 uv vertex per real 3d vertex. That is: most 3d package importers/exporter will simply generate a second vertex in the very exact position. Asigning one uv coord for one, and anothe rfor the other.



Is juts quite an old format… :wink:



OBJ does not have the issue, I think ASE (probably better for levels, as supports two UV channels) neither. But if the model was once a 3ds, your lost.





Solution: not use 3ds. The other one could be more painful: just force the loader to find every very exactly coincident (with several digits) vertices by a routine, and weld them some way. Milkshape doe sthis with its menu command “Vertex”/“Weld together”.



If the prob is totally different , then I am missing the point. But it really sounds like that…



(could perhaps be it tries to asign a different mesh to every smooth groups, as I dunno about custom loaders…)



I don’t have a single notion of coding, hehe.



Oh, forgot to explain where it exactly happens it…That is, when a 3d vertex, a vertex I mean, has 2 uv vertex coords…exactly those vertices forming the border of an uv island, and uv chunk, to call it someway. That is, quite often.



To put u a clear, clear exaple. U have a cilinder. You uv map it witha cilindrical projection. Well, imagine it unwrapped like a world globe map when u see in a book. It will have a limit in the right and left extremes… That can be called an “uv border” or how you want. There u have it…those in that vertical line will coorespond both to same real 3d vertices. Porblem…2 uv vertices for one only real vertice.



No probs using md5, x, obj, ase…problem using md2, md3, *.3ds.



Solution for the artist, hiding the seams in non seen parts, or ask the coder make a loader that converts the format to engine format (as if it keeps being a 3ds, no way) , but adding the extra proccessing to remove doubles, re-welding the mesh, there. probaly quite complex, dunno.

It is not a bug. If the same vertex has to have 2 different normals for two different triangles, it has to be duplicated to support that. There’s no way around it.

Hi,

thanks for your reply.



ok…3ds can’t handle multiple uv’s per vertex. Can’t this be handled when converting to jME? Should’nt the jME format force all importers to the same standard format?



Update:

I’ve tried an .obj as suggested by snaga and I can get a clean vertex array with no duplicates. It seems obj2jme does not create duplicate vertices at all. So I have to wonder why other conversion formats , like 3ds2jme, need to?

Since my last post I am the same no-coder person, but… :wink:



What cep21 says could be true, and could be true what I told you.



The root of the things is … *.3ds …is quite a crappy format.



I mean, it does not support smooth groups (normals,after all. Perhaps cep21 refers to that) , it usually indeed breaks smoothing.



In the other side, it does not support multiple UVs perf vertex.



As OBJ does support both features (smooth groups, and multiple UVs per vertex) , not sure which one is breaking it for u. But multiple UV appear almost allways, while the normals problem, can be tricked, somehow. By code, in other engines, what they used to do is really a full work on the imported mesh, by code (weld,etc)…so much that indeed, didn’t worth it…Bette use OBJ. Most people don’t even know the seam mesh they are exporting can be exported from Max -if use Max- using habware.at/duck4.htm (obj exporter for Max4,5) or habware.at/duck6.htm for max 6.



Also an ASE would be better.



Indeed , in STATIC meshes, I’d priorize formats this way (best the first one)



ASE(multiple uvs per vertex, smooth groups, can have great multiple UV channels(different from the 3ds problem!), even, etc.Disadvantage is very few exporters for it.), OBJ(all ase has except multiple channels (lightmaps)), X(Complex for coders. Multiple channels for lightmaps, but no smooth groups, and while OBJ and ASE are unlimited, x has a 65k tris limit, like .3ds), …whatever the format…and if really,really no other way….3ds… :wink:



Depending on the package u use, or how much do you apreciate that fact, OBJ has a load more exporters than ASE. Also x. ASE is only exported by Max and Ultimate Unwrap. The other available exporters usually are non full featured: Blender one only exports 1 uv channel, which is the advantage over OBJ…So…if u don’t have Max, or Ultimate Unwrap, start thinking much better in OBJ…As also, is perfectly re edited in any package, while not much packages opening ASE. You can add an ASE importer for Max, though, but not for Ultimate Unwrap. I have an OBJ to ASE converter, but of course, multiple uv channels (for lightmaps) , are lost.



ASE in this is quite mroe advanced than OBJ in the fact that it can even end up porting camera and lights information.And pretty many other things: It’s 3d Studio Ascii Scenery Exporter, so it handles a lot of the scene info… (also vertex colors, which OBJ does not handle, but x does.)



But like in animation, the definite winner is the one having more support in packages. You can’t export -that i know- an ASE from maya5 or 6, but yes an OBJ. While x was winning in that, and still is, to md5, md5 now has a load of other packages supporting it…Guess Carmack has its legions of followers…at least in technology and going allways one step forward, seems has not much competition… :wink:



While a bit off topic, I’d priorize animation formats this way :



md5 (coding easiness(a friend made a loader for his c++ engine without any type of doc! try and do that with x, lol… ), and better thought), x (main advantage: hugely spread in packages(but md5 is now on the main ones)) , md3 (8.192 tris limit, like *.3ds, multiple UV coords per vertex not allowed). md2 (widely supported in engines, but less vertex count(4096 tris), trembling vertices noticeable glitch(not from a distance(ie: wc3 view)) , same UVs breaking mesh(double vertices) problem than md3 and 3ds, some lighting/normals problems (some more than md3 use to have), probably restricted by format definition to BMP and PCX (quite non compressed formats).While perhaps can be forced jpg or png. Quake 2 engine also didn’t allowed more than 256 cols, but i seen this forced in most engines. )





Formats, formats…each has its issue…But the general rule…the modern, the better… I’d go for md5, obj, ase, png and jpg…You have it all with that :slight_smile: No need to work in more…



Oh, well, yep, the map format being spoken about now, portals and that stuff…I get lost there.

If you emailed me your obj and 3ds file I could take a look and see what’s going on.

done.