Главная страница
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.032 c
3-1098081686
cad2206
2004-10-18 10:41
2004.11.14
Номер записи в отфильтрованой таблице???


1-1099204718
проходящий мимо
2004-10-31 09:38
2004.11.14
edit


3-1098039899
S@shka
2004-10-17 23:04
2004.11.14
100% загрузка проца


4-1096915697
Klopan
2004-10-04 22:48
2004.11.14
Обновить часть экрана.


1-1098867355
_Сергей_
2004-10-27 12:55
2004.11.14
Дизайнер форм