1. How many ray is accurate to detect vision from a tank?
one from each station with an exterior view to each target in the station's arc of sight/fire within visible range. the type of tank will make a big difference. in a large WW1 tank, you might have 6 stations with exterior views, and FOVs of 30-45 degrees. in a newer tank, you might have something like a 90 degree FOV for the driver, a 30 degree FOV for the gunner, and a 360 degree FOV for the commander/spotter.
2. How many ray for each character?
one to each target in visual range. infantry has a 360 FOV.
3. Should I calculate the distance against EVERY model and create rays at each model if it's close enough?
that's what i do (sneak/stealth mode, fps/rpg game). but i only do the ray casting LOS/LOF (line of sight / line of fire) calculations if the player is in sneak mode (and undetected by hostiles).
4. If the model is a character the ray will start from his eyes, however, if it's a tank, from where the ray should start?
the visual orifice of the station. IE the driver's view slot in a WW2 tank, the persicope on top of the turret of a modern tank, the MG station's viewport on the side of a WW1 tank, etc.
5. How do I determine the exact ray target? (rayTo = target.position) --> I don't think this is good enough
for infantry, center to center may be good enough. to increase accuracy, you'd step up to something like checking 4 corners of a bounding box, or perhaps some type of bounding sphere type test. for tanks, if center to center isn't good enough (probably won't be), again you'd go BBox corners, etc. for a tank, bbox corners would be more accurate than bounding sphere.
with center to center vs bbox, almost half a target would be visible before the LOS/LOF test indicated so.
I want to create something efficient and at the same time with high performance.
by that i assume you mean accurate (hi performance) and fast (efficient).
accurate means bbox or the like. fast means... well. write the code. if its not fast enough, then you optimize. of course, no harm with writing it with speed in mind from the get go... i think i just did a bressingham's kinda thing (step moving along a direction vector, checking for collisions with occluding objects/terrain). speed was a concern, but i got it working ok. can't recall if i had to optimize. if so, must not have been much.
"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"