Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Direct3d] Детализация 
:(
    Опции темы
shuttle
Дата 19.10.2009, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



детализация ландшафта в Direct3d - 
Координатная сетка - там где находится наблюдтель треугольники рисутся соединяя соседние точки, на удалении от наблюдателя треугольники рисуются через соседние точки(через каждую вторую точку) и так далее чем дальше расстояние, тем больше пропускается точек координатной сетки(тем больше стороны треугольников) - одним словом детализация. 
И что бы все это реализовать надо постоянно пересчитывать индексный буффер, насколько этот пересчет будет накладен, будет ли он оправдан с точки зрения производительности?
Может есть другие идеи детализации?

--------------------
PM MAIL   Вверх
EgoBrain
Дата 21.10.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Если Вам нужно измнять качество модели (ландшафта) по мере удаления от наблюдателя то есть специальные функции для оптимизации и упрощения мешей. Копай в сторону:
Цитата

HRESULT Optimize(
  DWORD Flags,
  CONST DWORD * pAdjacencyIn,
  DWORD * pAdjacencyOut,
  DWORD * pFaceRemap,
  LPD3DXBUFFER * ppVertexRemap,
  LPD3DXMESH * ppOptMesh
);
Parameters
Flags 
[in] Specifies the type of optimization to perform. This parameter can be set to a combination of one or more flags from D3DXMESHOPT and D3DXMESH (except D3DXMESH_32BIT, D3DXMESH_IB_WRITEONLY, and D3DXMESH_WRITEONLY). 
pAdjacencyIn 
[in] Pointer to an array of three DWORDs per face that specifies the three neighbors for each face in the source mesh. If the edge has no adjacent faces, the value is 0xffffffff. See Remarks. 
pAdjacencyOut 
[in, out] Pointer to an array of three DWORDs per face that specifies the three neighbors for each face in the optimized mesh. If the edge has no adjacent faces, the value is 0xffffffff. 
pFaceRemap 
[in, out] An array of DWORDs, one per face, that identifies the original mesh face that corresponds to each face in the optimized mesh. If the value supplied for this argument is NULL, face remap data is not returned. 
ppVertexRemap 
[out] Address of a pointer to an ID3DXBuffer interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping. 
ppOptMesh 
[out] Address of a pointer to an ID3DXMesh interface, representing the optimized mesh. 


HRESULT D3DXSimplifyMesh(
  LPD3DXMESH pMesh,
  CONST DWORD * pAdjacency,
  CONST D3DXATTRIBUTEWEIGHTS * pVertexAttributeWeights,
  CONST FLOAT * pVertexWeights,
  DWORD MinValue,
  DWORD Options,
  LPD3DXMESH * ppMesh
);
Parameters
pMesh 
[in] Pointer to an ID3DXMesh interface, representing the source mesh. 
pAdjacency 
[in] Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh to be simplified. 
pVertexAttributeWeights 
[in] Pointer to a D3DXATTRIBUTEWEIGHTS structure, containing the weight for each vertex component. If this parameter is set to NULL, a default structure is used. See Remarks. 
pVertexWeights 
[in] Pointer to an array of vertex weights. If this parameter is set to NULL, all vertex weights are set to 1.0. 
MinValue 
[in] Number of vertices or faces, depending on the flag set in the Options parameter, by which to simplify the source mesh. 
Options 
[in] Specifies simplification options for the mesh. One of the flags in D3DXMESHSIMP can be set. 
ppMesh 
[out] Address of a pointer to an ID3DXMesh interface, representing the returned simplification mesh. 


В данном случае встает выбор между паматью и производительностью. Можно хранить несколько экземпляров мешей на диске от самого детализированного до самого упращенного (тратить память), или оптимизировать мешь программно (тратить процессорное время).
К сожалению конкретный пример показать не могу, так как делал подобное только на управляемом директе.

Это сообщение отредактировал(а) EgoBrain - 21.10.2009, 00:47
PM MAIL ICQ Skype   Вверх
Ferrisgeneral
Дата 7.2.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



а можно поподробнее расказать про оптимизацию меша програмно. Если есть возможность, то можну ссылочку на пример с конкретной реализацией.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0787 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.