1. When you say keyframed, do you mean statically defined meshes, or dynamically generated meshes using a skeleton and weighted vertex blending?

skeletons and skin-weights.

2. Wouldn't a skeletal solution scale better to the users CPU?


3. Will you be using vertex shaders to accomplish the interpolation between animations?


4. How do you intend to support full body meshes, one piece, or built from multiple pieces?
both at once!
I hope to import meshes built with a hierarchy of submeshes.
A simple visibility flag is associated with each mesh.
Posted on 2002-10-23 02:02:31 by Homer
A simple visibility flag is associated with each mesh.

Would that allow for things like dismemberment?

Sounds awesome, can't wait to see it in action.

Posted on 2002-10-23 02:10:29 by Maelstrom
Here's the latest.
My third attempt at making this rip actually compile.
I've hobbled a lot of functions, and left out even more.
But it compiled.
And for the most part, it's up and running.

Here's the source and executable of the Loader.
It loads animated skinned mesh models from xfiles.
It can handle more than one xfile at once.
It's far from finished !! But its something to look at...
And Scronty, it loads your Farmer.x hierarchy :D

Not included : dx8 dll's and x-files , as per usual (sorry - files are too large)
Posted on 2002-10-23 02:13:35 by Homer
I probably should have mentioned that I've employed TreeView to display hierarchy information from xfiles in realtime, its not clear until u play around.
Knowing this, you can look at the hierarchy anytime before the app crashes :p
Posted on 2002-10-23 02:18:55 by Homer
My Loader is failing in LoadAMesh, just after I succeed in loading the SkinMesh,
I try to call GetBufferPointer on the Adjacency data buffer pointer, and it fails.
Anyone got a clue? HELP!!
Posted on 2002-10-25 00:51:34 by Homer
Oh nevermind, I fixed it, though I'm not sure what I fixed...
anyhow, the code is falling through to the Bones section,
and then failing in GenerateMesh.
Progress can be a good thing too !!
Posted on 2002-10-25 02:36:57 by Homer
(work continues in other areas of the project)
(modular design means nothing is ever wasted)
Posted on 2002-11-23 21:06:05 by Homer
I've run into a road block also once again, I have no idea how to convert an 8-bit sample to a 16-bit sample, actually I have a conversion algothrim going but the output is quite scratchy and I dont want that, doing a XOR to flip the sign bit makes it sound too loud!!! I guess I'll work on other areas like you :D
Posted on 2002-11-24 18:50:57 by x86asm
Digitized analog samples use stepped ramping of the source voltage.
An 8-bit sample has 256 possible discrete values at any moment, and a 16-bit sample has 65536 possible discrete values.

The volume is decided by the amplitude of analog waves, this we know.
So to convert an 8-bit sample to a 16-bit sample, you could begin by calculating the scalar 16-bit equivalent of each scalar 8-bit byte, which is simply to multiply each 8-bit value by 256, which corrects the ratio.
Note that *256 can be done with an 8 bit shift, or a byteshift.
In hex, 00C8 becomes C800.
So we're expanding a byte to a 16 bit word, then leftshift, multiply or byteshift.
It might seem a bit rugged, but the digital2analog converter in the soundcard will interpolate the voltage correctly, these are merely guidepoints on the waveform.
Sane people would stop here.

Let's suppose you wanted to double the sample rate, you could create extra 16 bit values based on the average of any two, inserting them to create smoother waves in the 16bit sample.
Insane people would stop here.

Audiophiles might get upset by the incorrect timbre created by simple weighted averaging we used to generate and insert extra sample data.
This can be improved in software by noting the values of high and lows (ie, where the direction of the wave is changing), then creating a partial sinewave between them, and using the points obtained from the averaging calculation as weighting points on the sine curve sections, and then resampling using the weighted curves to correct the values inbetween the highs and lows.
I'll stop here.
Posted on 2002-11-26 02:19:57 by Homer
Thanks!!!! That info really helped clear some stuff :D
Posted on 2002-11-26 14:56:56 by x86asm

I've figured out how to implement a matrix stack.
There's still something fundamentally wrong with the Loader.
I think it's to do with masm's default nesting level.
If I place locals in the data segment, problems disappear.
But there's times when I don't want to do this.
Posted on 2002-12-14 07:46:48 by Homer
While working on another module, I discovered some bugs in the latest update to the LinkedList code. I believe I have solved the mystery of the 'loader bugs.
I'll get back onto it shortly, and will upload a bugfree LinkedList include also.
Posted on 2002-12-16 22:07:04 by Homer