Не пашет z buffer

Тема в разделе "WASM.DirectX", создана пользователем _220, 7 апр 2006.

  1. _220

    _220 New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    111
    в общем не работает он, хрен знает почему, в сиплюсплюсной версии работал, настраи ваю все так:



    d3d8 GetAdapterDisplayMode,g_pd3d,D3DADAPTER_DEFAULT,addr d3ddm

    mov eax, d3ddm.Format

    mov d3dpp.BackBufferFormat,eax

    mov d3dpp.Windowed,1

    mov d3dpp.EnableAutoDepthStencil,1

    mov d3dpp.AutoDepthStencilFormat,D3DFMT_D16

    mov d3dpp.SwapEffect,D3DSWAPEFFECT_FLIP

    ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    d3d8 CreateDevice, g_pd3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd , D3DCREATE_HARDWARE_VERTEXPROCESSING, ADDR d3dpp, ADDR g_pd3ddev

    test eax,eax

    jnz fail_CreateDevice



    потом еще:



    d3dev8 SetTransform, g_pd3ddev, D3DTS_WORLD, ADDR WorldMatrix

    d3dev8 SetTransform, g_pd3ddev, D3DTS_VIEW, ADDR ViewMatrix

    d3dev8 SetTransform, g_pd3ddev, D3DTS_PROJECTION, ADDR ProjectionMatrix

    d3dev8 SetRenderState, g_pd3ddev, D3DRS_ZENABLE, TRUE

    d3dev8 SetRenderState, g_pd3ddev, D3DRS_CULLMODE, D3DCULL_CCW

    d3dev8 SetRenderState, g_pd3ddev, D3DRS_LIGHTING, FALSE

    d3dev8 SetTextureStageState,g_pd3ddev,0, D3DTSS_MAGFILTER, CurrentFilter

    d3dev8 SetTextureStageState,g_pd3ddev,0, D3DTSS_MINFILTER, CurrentFilter

    d3dev8 SetTextureStageState,g_pd3ddev,0, D3DTSS_MIPFILTER, CurrentFilter



    и че-то не работает
     
  2. Leat

    Leat New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2006
    Сообщения:
    13
    Адрес:
    Russia
    А D3DRS_ZWRITEENABLE нигде не отключался?

    И в Clear стоит D3DCLEAR_ZBUFFER?

    У меня 16-битный сильно глючит, я использую 24.
     
  3. _220

    _220 New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    111
    В общем что-то вроде з-буфера работает, поскольку если поиграть с ZValue, которое я передаю в Clear, то на экране ничего нету(если ZValue < 1) и все как обычно если >=1. Может дело в том, что я рисую все из одного вертексного буфера, но не сразу, сначала немного треугольников, потом меняю текстуру, рисую еще треугольники и т.д.
     
  4. HitmaN85

    HitmaN85 New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2005
    Сообщения:
    36
    Может дело в координатах вертексов?
     
  5. _220

    _220 New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    111
    а что может быть с кординатами вертексов не так? Рисуются где надо, может быть проблема в том, что я юзаю D3DCULL_CCW?
     
  6. Leat

    Leat New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2006
    Сообщения:
    13
    Адрес:
    Russia
    А на сколько установлен ближний клиппер проекции? И каковы масштабы объектов?
     
  7. _220

    _220 New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    111
    Сорри за ламерство, а почему ближнюю границу клиппинга нельзя ставить 0.0ф?(поставил 1.0ф, заработало). Каким макаром это влият на з буфер, я думал, что если полигон отсекается, то он отсекается, и никакой буфер о его существовании не узнает.
     
  8. Leat

    Leat New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2006
    Сообщения:
    13
    Адрес:
    Russia
    Оно не влияет на Z буфер, это как-то влияет на результат вычисления Z вершины. Чем меньше ближний клиппер, тем ближе будут начинанаться глюки. Еще есть вариант D3DZB_USEW (для D3DRS_ZENABLE).
     
  9. MrMadguy

    MrMadguy New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2006
    Сообщения:
    19
    Адрес:
    Russia
    NearZ влияет на поекцию объектов на экранную плоскость. А так как экранной плоскостью является ближняя грань усеченной проекциооной пирамиды, то при NearZ=0 площадь этой плоскости сжимается в точку и происходит потеря точности и соответсвенно отсутсвие проецирования вообще.



    В общем пацаны, читайте внимательно про ProjectionMatrix в D3D или OpenGL SDK.
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    MrMadguy



    Это самая укуренная трактовка того, почему нельзя делить на ноль :-D