Bill Currie
f958afad53
Optionally allocate extra data for iqm blend frames.
...
Also, correct the blend parameter type (int->float. oops).
2012-05-17 15:57:07 +09:00
Bill Currie
02f8aa6b75
Add Mat4MultAdd macro.
2012-05-17 15:56:01 +09:00
Bill Currie
c0df07b607
Enable loading of iqm models in gl.
...
They don't render yet, but the engine doesn't segfault.
The vertex blend indices are rewritten with blend palette indices.
2012-05-17 15:55:38 +09:00
Bill Currie
e722352a61
Add SYS_MODEL developer flag (8192)
2012-05-17 13:39:45 +09:00
Bill Currie
23284536b5
Move IQM freeing into common code.
2012-05-16 18:09:44 +09:00
Bill Currie
041d63c828
Move the frame blending into common code.
2012-05-16 17:44:18 +09:00
Bill Currie
8ada7c02a3
Remove the vertex scaling.
...
It was there only because mrfixit is rather small (8qu?) and it made
finding him easier :). Anyway, any scaling should be done in the engine.
2012-05-16 08:13:59 +09:00
Bill Currie
9984925fe8
Correct a comment.
2012-05-15 21:08:47 +09:00
Bill Currie
31772afd13
Add in some ambient light for iqm models.
...
Though the bsp loader doesn't yet support colored lighting, the ambient
light will be colored when it does. With this, I guess iqm model support is
done for glsl until I figure out how I want to do dual quaternion support.
2012-05-15 21:08:47 +09:00
Bill Currie
111377f1be
Use buffer objects for iqm vertex arrays and elements.
2012-05-15 21:08:47 +09:00
Bill Currie
5740dba467
Mark iqm models as need-load when clearing.
...
This fixes the segfault on map change.
2012-05-15 21:08:47 +09:00
Bill Currie
0fd2b01665
Update the shader to work as it should :)
...
I always thought it whould be "light - point" :P. Also, in normal maps, 127
is 0.
2012-05-15 21:08:47 +09:00
Bill Currie
c454b96d2a
Translate lights into entity space.
...
Finally, lights work "properly". Probably the nicest lighting we've ever
had :) (still have to put in ambient, though).
2012-05-15 21:08:47 +09:00
Bill Currie
1375c3cf03
Finally, load textures for iqm :)
2012-05-15 21:08:47 +09:00
Bill Currie
a032aa5adf
Get the lights working (as such).
...
They work nicely now when the normal map and texture are bypassed (don't
know what texture is getting used currently).
2012-05-15 21:08:47 +09:00
Bill Currie
8c5e278bf8
Implement frame blending for iqm.
...
Now that I have things working... :)
2012-05-15 21:08:47 +09:00
Bill Currie
c694b9f77e
Add Mat4Blend macro.
2012-05-15 21:08:46 +09:00
Bill Currie
a938c7fb14
Almost fix the animations.
...
There's still a problem with his finger tips and feet, but the rest of his
limbs seem to be working well. Much thanks to Spike for encouraging me to
do a dump of the matices that are actually sent to the card.
It turns out that animated joints remain relative right up to the last
moment.
2012-05-15 21:08:46 +09:00
Bill Currie
4ba69b511b
Make quat_origin the right type.
...
It's quat_t, not vec3_t :P.
2012-05-15 21:08:46 +09:00
Bill Currie
202ab04572
Ensure the rotation quats are normalized.
...
Doesn't make any noticeable difference, but it doesn't hurt.
2012-05-15 21:08:46 +09:00
Bill Currie
31d89782ef
Use the correct index variable when byteswapping the arrays.
...
Not the cause of the broken animations :(
2012-05-15 21:08:46 +09:00
Bill Currie
7cda91a879
Temporarily disable dual quaternions.
...
The animation data isn't getting loaded or used properly (not sure yet).
This helps ensure it's not something I've done wrong with dual quats.
2012-05-15 21:08:46 +09:00
Bill Currie
4b38048a5c
Create functions for rotation and translation.
2012-05-15 21:08:46 +09:00
Bill Currie
5b4fdd2a93
Use the correct position for light calcs.
...
I should have remembered that gl_FragCoord wasn't right.
2012-05-15 21:08:46 +09:00
Bill Currie
2080c337d7
Avoid using malloc/free every model/frame.
2012-05-15 21:08:46 +09:00
Bill Currie
c2e0674d50
Implement R_IQMGetLerpedFrames().
...
Like R_AliasGetLerpedFrames, but for IQM. It calcualtes the current frame
number and blend between the previous and current frames.
2012-05-15 21:08:46 +09:00
Bill Currie
8387d987e2
Change position to vposition.
2012-05-15 21:08:46 +09:00
Bill Currie
099ef348c6
Advance the vertex attrib index.
...
Disabling the array right after enabling it was causing things to just not
work :P
2012-05-15 21:08:46 +09:00
Bill Currie
d1d4c6142c
Get the frame data from the right places.
...
Always using joint[0] of the frames wasn't very useful.
2012-05-15 21:08:46 +09:00
Bill Currie
74cb49ef7c
Free the blended frame data.
2012-05-15 21:08:45 +09:00
Bill Currie
551dfc47fb
Build the iqm vertex arrays in the correct order.
...
They need to be built in ascending type order (makes life easier in the
renderer).
2012-05-15 21:08:45 +09:00
Bill Currie
bea8f8f9c4
Fix a segfault when searching for dlights.
...
Uninitialized var bites my bum :P
2012-05-15 21:08:45 +09:00
Bill Currie
2e98c31175
Check the corrent bits when reading scale frame data.
...
Fixes the invalid reads when loading an iqm (at least for mrfixit).
2012-05-15 21:08:45 +09:00
Bill Currie
9c69404163
Attempt to render iqm models.
...
Things are a right mess (segfaults, invalid accesses on load, etc), but
hey, it's a start :)
2012-05-15 21:08:45 +09:00
Bill Currie
15fd3be73a
Allow iqm models when storing efrags.
2012-05-15 21:08:45 +09:00
Bill Currie
a880f33152
Set the model type for iqm.
...
Forgot this rather important step :P
2012-05-15 21:08:45 +09:00
Bill Currie
41e7a6c70c
Search for the "nearest" dlights.
...
Nearness is a function of both distance and intensity: distant bright
lights can take priority over close dim lights.
2012-05-15 21:08:45 +09:00
Bill Currie
0becd35b65
Begin work on rendering iqm models.
...
No chance of working yet, but the shaders compile :)
2012-05-15 21:08:45 +09:00
Bill Currie
078cb10caf
Add a stride field to iqm_t.
...
Since iqm vertex arrays are variable, and I don't want to calculate the
stride every time I render a model, cached the value used when building the
arrays.
2012-05-15 21:08:45 +09:00
Bill Currie
15d35fbdc9
Add mvp_mat and some comments.
2012-05-15 21:08:45 +09:00
Bill Currie
59c5bf2f9e
Code up an initial version of the iqm vertex shader.
...
Probably more bugs than an old kitchen cupboard :P
2012-05-15 21:08:45 +09:00
Bill Currie
6ab3bd45e5
Implement IQM animation loading.
...
Bone poses are converted to dual quaternions + shear + scale for nice
skinning. Will likely be slow for software skinning, but too bad.
2012-05-15 21:08:45 +09:00
Bill Currie
9a3206795e
Add VectorUnshear().
...
VectorUnshear uses the exact same shear vector to remove shear from a
sheared vector. ie with:
VectorShear (shear, v, w);
VectorUnshear (shear, w, x);
x == v within fp math limits.
2012-05-15 21:08:44 +09:00
Bill Currie
bf38e6073e
Implement iqm joint loading.
2012-05-15 21:08:44 +09:00
Bill Currie
9f253454e4
Implement and test Mat4Inverse().
2012-05-15 21:08:44 +09:00
Bill Currie
fa6270322f
Make Mat4Decompose a little more intuitive.
...
Params are now in application order (good thing not much code uses it yet).
2012-05-15 21:08:44 +09:00
Bill Currie
1473dbd526
Add a comment about the evaluation order in VectorShear.
2012-05-15 21:08:44 +09:00
Bill Currie
de131c18ad
Add VectorShear and really test Mat4Decompose.
...
And the tests really exercised VectorShear (first attempt had things
messed up when more than one shear value was non-zero). Also,
Mat4Decompose wasn't orthogonalizing the z axis row. Oops. Anyway,
Mat4Decompose is now known to work well, and the usage of its output is
understood :)
2012-05-15 21:08:44 +09:00
Bill Currie
8cea6b0a1e
Fix a scaling snafu in Mat4Decompose.
...
Found when checking how rotation affects non-uniform scaling (haven't
written proper tests yet: need to figure out how).
2012-05-15 21:08:44 +09:00
Bill Currie
82abd5e426
More matrix tests.
2012-05-15 21:08:44 +09:00