хук EndScene и рисование примитивов в игре  
Автор Сообщение



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение хук 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 - пока молчат, или слишком нубско или сами не знают чем помочь



11 мар 2012, 15:13
Профиль

0
Сообщение хук EndScene и рисование примитивов в игре

в смысле "не работает z-buffer"? Ты имеешь в виду z-test?

 



11 мар 2012, 15:37
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение хук EndScene и рисование примитивов в игре

да, он самый, буфер глубины

пробовал сохранять stateblock рисовать и восстанавливать - ноль изменений :(



11 мар 2012, 15:40
Профиль

0
Сообщение хук EndScene и рисование примитивов в игре

выключи альфаблендинг, зачем он тебе тут. По-моему они вместе не работают



11 мар 2012, 15:42
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение хук EndScene и рисование примитивов в игре

Laywaste писал(а):

выключи альфаблендинг, зачем он тебе тут. По-моему они вместе не работают

они же совсем не связаны о0

почему не работают? все работает, писал приложения (не связанные с вов)



11 мар 2012, 15:54
Профиль

0
Сообщение хук EndScene и рисование примитивов в игре

если включен z-test, то у тебя цвет пикселя на экране будет определяться пикселем с наименьшей глубиной, а при включенном альфаблендинге он рассчитывается по формуле с использованием альфа-канала через все пиксели на одной линии зрения. Хотя мб я уже забыл зачем вообще нужен z-test ^^



11 мар 2012, 16:00
Профиль



<Мёртвая Хватка>


Сервер: Азурегос
2х2: 1766
3х3: 1794
0
Сообщение хук EndScene и рисование примитивов в игре

решил проблему, все дело было в zFar и zNear камеры, zbuffer работал.

кому интересно - дам исходники этой хренотени

#667



23 мар 2012, 11:17
Профиль
Начать новую тему Ответить на тему


Перейти:  

На сайте использованы материалы, принадлежащие Blizzard Entertainment. Копирование материалов возможно только c разрешения портала. В противном случае это будет называться уже другим словом.
Рейтинг@Mail.ru