Границы объекта в OpenGL?

Тема в разделе "WASM.OpenGL", создана пользователем AlexBond, 29 май 2007.

  1. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Пишу 3D редактор на OpenGL. Реализовал переменищение камеры на подобие Zoom, Pan, Dolly, Rotate как в 3DSMax. Теперь реализую выделение объекта, так вот когда я получил имя объекта я хочу выделить его в Бокс, подобно 3DSMax. но как узнать размеры этого бокса, если объект загружается. Т.е. Мне нужно узнать Максимумы и Минимумы по X,Y,Z. Как это реализовать?
    Конечно можно прогонять все вертексы на проверку максимума и минимума, но может есть другой способ?
    Этот способ меня не устраивает, т.к. у меня объект претерпевает множество изменений, в итоге придется прогонять все вертексы умножая их на матрицу преобразований...

    Есть ли другой способ?
     
  2. _DEN_

    _DEN_ DEN

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

    Средствами OpenGL или DirectX этого не узнать. Так или иначе - все придется делать руками.
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Поддерживаю.

    AlexBond
    Непонятно зачем.
    IMHO тут просто нужно правильно выбрать архитектуру.
    В том же максе например координаты объектов храняться в локальной системе координат , а матрицы преобразований отдельно, и когда наступает момент показа, рендериться с учётом матриц трансформаций. А пересчитывать баундинг бокс при изменениях локальных координат не так уж и сложно. В максе при экпорте в .ASE все координаты вроде и вправду переводяться в глобальные, а в .3DS отдельно объекты в локальных, и матрицы преобразований. Причём матриц вроде три. Вращения, перемещения и маштабирования.
     
  4. _SaNitAr

    _SaNitAr New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2006
    Сообщения:
    68
    _DEN_
    D3DXComputeBoundingBox
    Computes a coordinate-axis oriented bounding box.

    HRESULT D3DXComputeBoundingBox(
    CONST D3DXVECTOR3 * pFirstPosition,
    DWORD NumVertices,
    DWORD dwStride,
    D3DXVECTOR3 * pMin,
    D3DXVECTOR3 * pMax
    );
    Parameters
    pFirstPosition
    [in] Pointer to the first position.
    NumVertices
    [in] Number of vertices.
    dwStride
    [in] Count or number of bytes between vertices.
    pMin
    [out] Pointer to a D3DXVECTOR3 structure, describing the returned lower-left corner of the bounding box. See Remarks.
    pMax
    [out] Pointer to a D3DXVECTOR3 structure, describing the returned upper-right corner of the bounding box. See Remarks.
    Return Values
    If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL.

    Remarks
    Requirements
    Header: Declared in D3dx9mesh.h.
     
  5. _DEN_

    _DEN_ DEN

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

    Ну я не сомневался что DX это куча, в которой можно откапать все что угодно))

    Остается заметить что функция бесполезна при вертексшейдерной трансормации (скелетная анимация, морф, и т.д.)