realbasic-nug
[Top] [All Lists]

Re: vertex wrestling in RB3D

To: realbasic-nug at lists dot realsoftware dot com
Subject: Re: vertex wrestling in RB3D
From: Jeff Quan <jquan at mindspring dot com>
Date: Sat, 30 Jun 2007 16:21:15 -0700
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug at lists dot realsoftware dot com
References: <mailman dot 30111 dot 1183198832 dot 256 dot realbasic-nug at lists dot realsoftware dot com>
> Date: Sat, 30 Jun 2007 01:12:10 -0700
> From: Fargo Holiday <fargo at rpgportland dot com>
>
> Onward! So, I decided to try my hand and doing this to a model loaded
> from a 3dmf. Model is loaded, all seems fine, and I have a button with
> this in it-
>   dim myV As new VectorList
>   dim v3d As new Vector3D
>
>   myV = tobj3d.Trimesh(0).VertexPositions
>
>   v3d = myV.GetVector(0)
>   v3d.Y = v3d.Y + 20
>   myV.SetVector(0, v3d)
>
>   Rb3DSpace1.Update
>
> And, for reasons that escape me, when I click the button I receive and
> outofbounds exception, seemingly from v3d = myV.GetVector(0).


Out of curiosity, are you trying to manipulate a 3DMF loaded into an  
Object3D or a Trimesh?

It would seem that myV isn't being set at all. However, if you remove  
the myV and just access things directly:

        v3d = tobj3d.Trimesh(0).VertexPositions.GetVector(0)

v3d will now store the correct value. Not as efficient as what you  
have if you're accessing more than one VertexPosition, but it works.

However, you cannot use SetVector if tobj3d is an Object3D -- nothing  
will happen.
SetVector only works when your 3DMF is copied into a Trimesh.
I use the function below to copy a single Object3D.Trimesh(n) into a  
Trimesh.

Dim mesh As Trimesh
mesh = CopyTrimesh(tobj3d.Trimesh(0))


Function CopyTrimesh(tm As Trimesh) As Trimesh
   Dim out As New Trimesh

   out.VertexCount = tm.VertexCount
   out.VertexPositions.Copy tm.VertexPositions
   if tm.HasVertexNormals then
     out.HasVertexNormals = True
     out.VertexNormals.Copy tm.VertexNormals
   end if
   if tm.HasVertexUVs then
     out.HasVertexUVs = True
     out.VertexUVs.Copy tm.VertexUVs
   end if
   if tm.HasVertexColors then
     out.HasVertexColors = True
     out.VertexColors.Copy tm.VertexColors
   end if

   out.TriangleCount = tm.TriangleCount
   out.Triangles.Copy tm.Triangles

   Dim p As Picture
   if tm.Material <> nil then
     p = tm.Material.Texture
     out.Material.Texture = p
     if tm.Material.HasDiffuseColor then out.Material.HasDiffuseColor  
= True
   end if

   return out

Once you have your Trimesh, you can now SetVector to your heart's  
desire.


==
Jeff Quan
jquan at mindspring dot com
http://www.jcquan.com/JQportfolio


_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives:
<http://support.realsoftware.com/listarchives/lists.html>


<Prev in Thread] Current Thread [Next in Thread>