vertices count in a mesh
Blitz3D Forums/Blitz3D Programming/vertices count in a mesh
| ||
hi, i'm new here and i am trying to get the coordinates of each and every vertex in imported .3ds or .x meshes, but i have no idea how i should be proceeding... my point is to interact with an imported mesh and deform it. thx in advance ! |
| ||
hi orion one, this is orion one ... what if those meshes have only one surface ? CountVertices can't work then, so ? bye, orion one |
| ||
[EDITED]surfaces = countsurfaces(mesh) for S = 1 to surfaces vertices = countvertices(surfaces) for V = 0 to vertices - 1 print vertexX(S,V) next next Hope this helps, orion one. Sergio. |
| ||
hi semar, thx for your routine, i have tested it on the meshes from the built-in 3D tutorials. i get a number of surfaces from 1 to 5 i.e. but a systematic memory access violation when it comes to count the vertices... why o why ? thx to all of you mesh=LoadMesh("C:\Program Files\Blitz3D\Samples\Blitz 3D Samples\mak\teapot\teapot.x") surfaces=CountSurfaces(mesh) For s=1 To surfaces vertices=CountVertices(surfaces) For v=0 To vertices Print VertexX(s,v) Next Next Acorn BBC model B 32k |
| ||
sorry. Change For v=0 To vertices to For v=0 To vertices -1 Since vertices counting in a surface go from 0 to num of vertices - 1. |
| ||
ciao sergio, now it's like that : Graphics3D 640, 480 mesh=LoadMesh("C:\Program Files\Blitz3D\Samples\Blitz 3D Samples\mak\driver\car.x") surfaces=CountSurfaces(mesh) Print surfaces For s=1 To surfaces vertices=CountVertices(s) For v=0 To vertices-1 Print VertexX(s,v) Next Next i've changed vertices=countvertices(surfaces) to countvertices(s) u've changed vertices to vertices-1 but still the same error... sorry to bother you with that orion one |
| ||
this works, Sergio ! Graphics3D 640, 480 mesh=LoadMesh("C:\Program Files\Blitz3D\Samples\Blitz 3D Samples\mak\driver\car.x") surfaces=CountSurfaces(mesh) For s=1 To surfaces ss=GetSurface(mesh,s) vertices=CountVertices(ss) For v=0 To vertices-1 Print VertexX(ss,v) Next Next the idea seems to use getsurface ... ti ringrazio molto, ciao |
| ||
Oh yes, getsurface was missing, hem... !!! =) You know, I have not blitz where I write from..! (prego, non c'e' di che ! Ah ma sei italiano anche tu ?!?) Bye, Sergio. |
| ||
50% italiano Sergio, forse ci conviene continuare via email/messenger senó incazziamo tutti hehe |
| ||
now another question : how do you DELETE a vertex in a mesh, or a vertex just added via AddVertex ? Orion One P.S. Dai Sergio dammi 'cora 'na mano ti prego |
| ||
ClearSurface surface,[clear_verts][,clear_triangles] Parameters: surface - surface handle clear_verts (optional) - true to remove all vertices from the specified surface, false not to. Defaults to true. clear_triangles (optional) - true to remove all triangles from the specified surface, false not to. Defaults to true. Description: Removes all vertices and/or triangles from a surface. This is useful for clearing sections of mesh. The results will be instantly visible. After clearing a surface, you may wish to add vertices and triangles to it again but with a slightly different polygon count for dynamic level of detail (LOD). |
| ||
thanks semar but my point is to delete one or a few vertices from a surface, not all of them. and by the way, how can i control the number of surfaces of a mesh created from scratch ? and in imported meshes (with 3D canvas per esempio) thx a lot |
| ||
Hum, I don't know if you can just delete a vertex, since a surface is made up by triangles, and each triangle needs three vertices. So if you (theoretically) delete only one vertex, how can the related triangle exist ? I *think* that you should delete the triangle, so to delete the one vertex you need to be deleted, and then re-create the triangle with the remaining two vertices, plus one that should come from another adiacent triangle. I'm just guessing... |
| ||
good guesses : i want to be able to delete vertices, and therefore the related triangles won't exist anymore (i want to create holes in meshes) is there any mean to delete single triangles instead of vertices ? |
| ||
Triangles can share vertices. So I guess what you could try is deleting all the triangles and then rebuild the surface without the triangle you want to remove. Rebuilding the triangle list should be faster than rebuilding the vert list because a triangle needs a lot less information. So you need to build a triangle list as shown below. This of course can be optimised, you do not really need to build a new trilist each time you do this. Of course you can get rid of the pesky verts you do not really need as well, but thats a bit more complicated.Dim Trilist(3000,2) Function removetri(surf,tri) numtris=CountTriangles(surf) For t=0 To numtris-1 trilist(t,0)=TriangleVertex(surf,t,0) trilist(t,1)=TriangleVertex(surf,t,1) trilist(t,2)=TriangleVertex(surf,t,2) Next ClearSurface surf,False,True For t=0 To numtris-1 If t<>tri Then AddTriangle(surf,trilist(t,0),trilist(t,1),trilist(t,2)) Next End Function Graphics3D 640,480,0,2 sphere=CreateSphere(12) EntityColor sphere,200,100,50 EntityPickMode sphere,2 EntityFX sphere,16 camera=CreateCamera() PositionEntity camera,0,0,-3 light=CreateLight() RotateEntity light,45,0,0 Repeat mx=MouseX() my=MouseY() TurnEntity sphere,KeyDown(200)-KeyDown(208),KeyDown(205)-KeyDown(203),0 If MouseDown(1) Then pick=CameraPick(camera,mx,my) If pick=sphere Then removetri(PickedSurface(),PickedTriangle()) RenderWorld Text 0,0,TrisRendered() Flip Until KeyDown(1) End |
| ||
thx for the code David. i will post a new and better question a bit later when i come up with some fresh code and ideas. thanks to all |
| ||
By the way, I have no trouble clearing a surface and building up a whole new triangle + vertice list of about 3000 vertices and 1500 triangles within the space of 1 millisecond. My game does this every frame. So I think complete reconstruction could be an option. |
| ||
thx Anthony, i have successfully solved my problem : i build a complex mesh with one triangle per surface, i can so delete a very small amount of the mesh at a time. and with code optimization, this should do it Orion One |
| ||
Hi Orion, How large a mesh do you have planned ? |
| ||
well, i plan to write a simulation of surgery, so i have several meshes representing each and every layer of human tissue, and moreover the deeper the structure the higher the number of meshes per tissue. skin=at least 3 layers let's say minimum 2000 triangles per layer, and that seems to me not to be enough |