Do I recalculate the respective buffer for the bullets location.
i don't quite follow, how'd you get from instancing vegetation to drawing bullets?
some cry3 specific thing i assume.
generally speaking, you'll have a model in buffers (vertex and index), and transforms for each instance in another buffer.
for modifiable vegetation, simply recalculate part or all of the transform buffer when required. you may also be able to do some indexing trick to only draw a range of instances in the transform buffer, and include/exclude vegetation that way.
although i'm not that well versed in dx11, i think you could also pass in flags in a constant buffer that could be used to determine which instances to draw.
it my also be possible to use some reserved value for a variable in the instance buffer that indicates "don't draw this instance".
it also may be possible to pass in some sort of "instance buffer" as well as the "transform buffer". the instance buffer would have a flag for each instance or perhaps work with indexes. not sure how many input buffers of what type you can use in dx11.
in the long run, recalculating the transform buffer, passing constant buffers, reserved values, an instance buffer (if supported), and drawing index ranges are all just different ways of telling directx which plants to draw.
me personally, i'd probably just recalculate the transform buffer as needed. i do a similar thing in my current title. vegetation is modifiable. terrain is drawn in chunks which are generated as needed from the various data structures that describe whats in the world. Any immobile object created in the world (a hut, landmark, storage pit, temporary shelter, or bedding) means the plants there should not be drawn. so whenever an immobile world object is created or destroyed, its "chunk" gets regenerated to add or remove the plants as needed.
when i generate a chunk, i basically do my own instancing to create the ground mesh for each ground texture tile. the "model" is a simple quad. a "pattern map" says which quads in the chunk's ground mesh use a given tile texture. for each quad that uses a given texture, the "model" is transformed to the correct x,z location in the chunk, procedurally height mapped in y, and added to a VB and IB. there's a VB and IB for each ground tile texture in the chunk. when its time to draw, i just set the ground texture and draw the VB for that texture, as the VB is already "pre-instanced" so to speak.
i still don't get the part about bullets and buffers though...
"DirectX is like a belt fed machine gun, where every texture change is like hand loading in a new belt of ammo. worse, every mesh (vb) is a new belt of ammo, and a texture is like breaking the gun down, and setting it up again elsewhere, then loading it, then spraying triangles again. so you want to setup the gun once, string all your belts together, load it once, then just spray."
Rockland Software Productions
"Building PC games since 1988"
Sign up for the Caveman beta!