just so you guys know, I'll be working on the bone tails in the next screenshots.
bone tails will be in the direction of the first child or opposite of the parent (if no childrn) and will show the scale and rotation if not explicitly set.
btw, for bones, I'll try to provide many different data specifications...
bones typically tend to have a:
- Loc,Rot,Sca (I'm not sure exactly what this is relative to, but I think it's the object-space matrix)
- Bind Matrix (typically relative to the parent bone's matrix as this is the common format)
- Inverse-Bind Matrix (relative to world-space, typically used for calculating an influence matrix from the current frame matrix, which should be a world matrix relative to *this* bone's current transformations)
the inverse is usually pre-calculated so the GPU doesn't have to double it's work-load to get it.
(getting the inverse of a matrix is a huge load of calculations)
yes, I've mentioned alot of matrices...
here how matrices work:
Transform = Mtx44( Loc, Rot, Sca )
Bind = World * Object * Transform * ... * Transform
Inverse = invert( Bind )
Influence = (( Bind * Inverse ) * Weight ) + Influence
TransformedVert = Vert * Influence
the frame matrix comes in with animation and is similar to the bind matrix, I'm only sure how to handle half it's data...
I'm not exactly sure how to apply key-frames yet, but once they're applied, the Bind matrix becomes the Frame matrix.
in GL terms, a bone is nothing more than a 4x4 matrix, meaning you can derive anything from anything
a 4x4 matrix is typically specified as:
[
[ R00Sx, R01, R02, Lx ],
[ R10, R11Sy, R12, Ly ],
[ R20, R21, R22Sz, Lz ],
[ 0, 0, 0, 1 ]
]
R = Rotation
S = Scale
L = Location
the 4th row is typically for view transformations such as perspective.
as far as UMC is concerned with these, you really only need to specify one of any, and it'll fill in the blanks automatically. (similar to Blender)
right now it doesn't do that... I need to work on the verification interface where THAT will do all that work.
UMC3.0 can be expected to fill in the blanks automatically as well as deal with data mis-matching.
the more data you supply, the more it can validate, which is a good thing
if everything you supply is in a different location (each to it's own),
each location will be drawn from red to pink to show the mis-matched locations.
(this will be selectable so you can export the proper location)
EDIT:
just got told by ImaginaryZ my info was hap-hazardly put together,
which I can understand considering how little I know about this stuff.
here's a reference that might help describe some of what I was trying to describe:
http://http.developer.nvidia.com/GPUGems/gpugems_ch04.html
but yea there's apparently more ways to roll-out data than I can even conceive...
all I need here is to supply easy functions for converting the data to and from what's needed to make it work in UMC.
due to the way UMC3.0a is built, this won't exactly be possible w/o loads of work on every angle...
UMC3.0 however can easily be extended with whatever's needed (since I now know how classes work)
problem there is UMC3.0 is only about 8% complete,
and I need to learn a crap-ton more before I can even design a decently-effective interface...
another topic I was hit up on was my use of terms which I guess can be confusing...
(I was brought up into hacking using these terms and they just made much more sense to me than the normal terms)
^ not to mention I chose these terms for noobs to make easy connections
my term - common term
Vert - Vertex Position or Vertice
UV - Texture Coordinate
FacePoint - Vertex
Rig - Armature/Skeleton/Matrix Palette
Bone - Matrix
the reasons I chose these terms:
Vert - mash-up between confusing Vertex and Vertice (singular term is usually called Vertex, not to confuse this with a facepoint)
UV - while TexCoord is the technical term used in GL, most editors tend to specify UV
FacePoint - derived from the OBJ file format, as it's much easier and less confusing than Vertex
Rig - I've seen the term used quite alot in various places
Bone - this one's pretty obvious and is quite common