хук EndScene и рисование примитивов в игре
В общем пост для тех, кто шарит.
Рисую примитивы в игре, хукая ф-цию EndScene (не помню, вроде begin) direct3d9
Рисуется все хорошо, минус в том, что не работает z-buffer
http://i.imgur.com/7OFi9.jpg
вот немного кода - эксперты, все ли нормально?
параметры device
Код:
device.SetRenderState(D3DRenderStateType.ZENABLE, 1);
device.SetRenderState(D3DRenderStateType.ZWRITEENABLE, 1);
device.SetRenderState(D3DRenderStateType.ZFUNC, (int)D3DCmp.LESSEQUAL);
device.SetRenderState(D3DRenderStateType.ALPHABLENDENABLE, 1);
device.SetRenderState(D3DRenderStateType.SRCBLEND, (int)D3DBlend.SRCALPHA);
device.SetRenderState(D3DRenderStateType.DESTBLEND, (int)D3DBlend.INVSRCALPHA);
device.SetRenderState(D3DRenderStateType.LIGHTING, 0);
device.SetRenderState(D3DRenderStateType.CULLMODE, 0);
world matrix
Код:
Matrix worldMatrix = Matrix.Translation(vector) * Matrix.RotationYawPitchRoll(yaw, pitch, roll);
device.SetTransform(D3DTransformStateType.World, &worldMatrix);
view matrix
Код:
Camera camera = Camera.GetCamera();
Matrix matrix;
if ( camera == null )
matrix = Matrix.Identity();
else
{
Vector3 eye = camera.Position;
Vector3 at = eye + camera.Forward();
Vector3 up = Vector3.Up;
matrix = Matrix.LookAtRH( eye, at, up );
}
device.SetTransform( D3DTransformStateType.VIEW, &matrix );
projection matrix
Код:
Camera camera = Camera.GetCamera();
Matrix matrix;
if ( camera == null )
matrix = Matrix.Identity();
else
{
float fov = camera.GetFov();
matrix = Matrix.PerspectiveFovRH( fov * 0.6f, camera.Aspect, camera.NearZ, camera.FarZ );
}
device.SetTransform( D3DTransformStateType.PROJECTION, &matrix );
viewport
Код:
D3DViewport viewport = device.GetViewport();
viewport.MinZ = 0;
viewport.MaxZ = 0.94f;
device.SetViewport(viewport);
MaxZ=0.94f (получил это значение хукая SetViewport)
как я понял обьекты рисуются при нем, интерфейс при 0.993f
Кто-нибудь тут вообще занимается подобным? Написал на ownedcore - пока молчат, или слишком нубско или сами не знают чем помочь