Пишу 3D редактор на OpenGL. Реализовал переменищение камеры на подобие Zoom, Pan, Dolly, Rotate как в 3DSMax. Теперь реализую выделение объекта, так вот когда я получил имя объекта я хочу выделить его в Бокс, подобно 3DSMax. но как узнать размеры этого бокса, если объект загружается. Т.е. Мне нужно узнать Максимумы и Минимумы по X,Y,Z. Как это реализовать? Конечно можно прогонять все вертексы на проверку максимума и минимума, но может есть другой способ? Этот способ меня не устраивает, т.к. у меня объект претерпевает множество изменений, в итоге придется прогонять все вертексы умножая их на матрицу преобразований... Есть ли другой способ?
_DEN_ Поддерживаю. AlexBond Непонятно зачем. IMHO тут просто нужно правильно выбрать архитектуру. В том же максе например координаты объектов храняться в локальной системе координат , а матрицы преобразований отдельно, и когда наступает момент показа, рендериться с учётом матриц трансформаций. А пересчитывать баундинг бокс при изменениях локальных координат не так уж и сложно. В максе при экпорте в .ASE все координаты вроде и вправду переводяться в глобальные, а в .3DS отдельно объекты в локальных, и матрицы преобразований. Причём матриц вроде три. Вращения, перемещения и маштабирования.
_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.
_SaNitAr Ну я не сомневался что DX это куча, в которой можно откапать все что угодно)) Остается заметить что функция бесполезна при вертексшейдерной трансормации (скелетная анимация, морф, и т.д.)