Sign in to follow this  

3D Animation/Movement

This topic is 3743 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Language: VB6 DX Version: DirectX8 I'm currently going for extreme simplicity using my own custom vertex/index buffers, rendering plain old simple cubes to create 'objects' with. My question is what is the best method for implementing animation? During each frame, should I be transforming the world matrix per object? Perhaps pre-construct potential movement destinations and use vertex tweening (something I don't know anything about yet)? Or can I hard edit the vertex buffer without an immense amount of overhead somehow? I already have the hierarchy from torso to shoulder, shoulder to bicep, bicep to forearm, etc etc and applying individual transformations per bone structure... but it just seems like a lot of draw calls to do it that way.

Share this post


Link to post
Share on other sites
Am I spouting off too much giberish? I'm taking bits and pieces of what I know and bits and pieces of what I am mostly assuming..

Setting a new transformation per object and doing an individual draw call is very costly, which is why I'm bothering to ask if there's another way I should be doing this.

Thanks in advance to any who can tolerate my newbishness and reply..

Share this post


Link to post
Share on other sites
I have used a lot of DX8/VB6 but mostly with 2D animation and some basic 3D. As your question alludes to, using matrix transforms to independently manipulate a lot of objects is slow. For maximum speed you need to be drawing a LOT of triangles with every DrawPrimitive, which isn't possible when you're constantly breaking the batch to set a new world matrix (or whatever).

Depending on how many vertices you're talking about, you can definitely 'hard edit' the vertex buffer in real time. Keep track of your positions internally and update a dynamic vertex buffer(s) as needed. There are a couple methods of doing this with various speed/memory tradeoffs, but be sure to check out some documentation for dynamic VB locking flags. Getting them correct is crucial to strong performance. Just keep in mind that your goal is to assemble some vertex/index buffer combination that will let you perform a DrawPrimitive with a large number of triangles.

Obviously if you decide to do the animation 'manually' you'll have to do the world space transformations on the CPU. You'll have to decide if the static vertex buffer method (which will give you transformations more or less for free) is superior for the complexity of your scene. Large dynamic VBs are extremely useful for 2D sprite engines but also have 3D uses (particle systems come to mind); somebody else may have a better idea but animation is kinda tricky because it is easy to stall the pipeline if you don't do it right.

I'm just giving you all this since nobody else had replied but again I don't know that much about bone structures so there may be other concepts in play that are more important. Also remember that even if you are using VB6 there is a wealth of 'general' information out there about C++ DirectX8 (and often even DX9) that you can assume applies to your project as well.

Share this post


Link to post
Share on other sites
I read a small doc regarding vertex tweening on gamedev itself I believe, but I didn't really know if that would be the best method or not.

Another aspect I thought about was whether or not I should be doing all this by an external mesh or not and perhaps have the animation information set up externally (something I know absolutely nothing of as of yet, and my skills with 3DS Max and the like are nearly non-existant).

Share this post


Link to post
Share on other sites

This topic is 3743 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this