Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

Подскажите как масштабировать модель (имеется ввиду X Mesh).   Найти похожие ветки 

 
Колбасьев ©   (2004-07-15 22:13) [0]

Подскажите как масштабировать модель (имеется ввиду X Mesh). Пока я использую код:

var
...
 XBuffer        : IDIRECT3DVERTEXBUFFER8;
 Vertices        : ^TNormDiffTextVertex;
 Desc            : TD3DVertexBuffer_Desc;
begin

...
 ptMesh.LockVertexBuffer(0, PByte(Vertices));

 ptMesh.GetVertexBuffer(XBuffer);
 XBuffer.GetDesc(Desc);

 for i := 0 to (Desc.Size div SizeOf(TNormDiffTextVertex)) - 1 do
 begin
   Vertices.X := Vertices.X * ScaleX;
   Vertices.Y := Vertices.Y * ScaleY;
   Vertices.Z := Vertices.Z * ScaleZ;
   Inc(Vertices);
 end;

 ptMesh.UnlockVertexBuffer;
...

end;


Но он масштабирует неправильно: каша какая-то получается.


 
Sapersky   (2004-07-16 10:09) [1]

А матрицей при выводе нельзя масштабировать? Всё равно же какая-то трансформация применяется, наверное.
Если уж нужно заранее... можно попробовать взять количество вершин через Mesh.GetNumVertices - а то относительно Desc.Size не помню, в байтах он или в элементах.


 
Колбасьев ©   (2004-07-16 17:12) [2]


> Если уж нужно заранее... можно попробовать взять количество
> вершин через Mesh.GetNumVertices - а то относительно Desc.Size
> не помню, в байтах он или в элементах.


Тогда вопрос: Mesh.GetNumVertices дает количество вершин в буффере IDirect3DVertexBuffer ? , или, что более вероятно - дает количество вершин, которые используются фасетами для построения треугольников (как в ASE например), тогда количество вершин в буффере не равно количеству вершин треугольников, так как в буффере будут повторяющиеся вершины?


 
Sapersky   (2004-07-17 22:32) [3]

Про Mesh.GetNumVertices написано "retrieves the number of vertices in the mesh" безо всяких комментариев, т.е., скорее всего, это самый простой вариант - размер вершинного буфера в элементах. Надо бы протестировать, конечно...

Относительно Desc.Size посмотрел - в байтах, так что в примере всё должно быть правильно... Может, формат (размер) вершины на самом деле не тот? Или значения Scale такие, что каша и должна получаться :)

Ещё, если делать с Desc.Size, то я бы сначала получал размер (ptMesh.GetVertexBuffer, XBuffer.GetDesc), а потом уже блокировал буфер. Блокировка - такая вещь, чем меньше в блокированном состоянии находишься, тем лучше. А тут ещё и обращения к заблокированному объекту идут. Хотя вроде бы оно допустимо (написано только что DrawPrimitive не будет работать), но лучше (ИМХО) так не делать.



Страницы: 1 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.043 c
14-1098883567
WondeRu
2004-10-27 17:26
2004.11.14
delphiМАСТЕР и delphiМАРГАРИТА :-) Булгаков, что еще....?


6-1094142820
masqito
2004-09-02 20:33
2004.11.14
NETBIOS и IP


3-1097958612
saNat
2004-10-17 00:30
2004.11.14
"Архивация" БД Access


14-1098841702
Думкин
2004-10-27 05:48
2004.11.14
С днем рождения! 27 октября


1-1098877184
Pentium133
2004-10-27 15:39
2004.11.14
А вот проблема с TComboBox