Главная страница
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.03 c
14-1098558826
CPUz80
2004-10-23 23:13
2004.11.14
Работа процессов в WIN32.


1-1097750096
panov
2004-10-14 14:34
2004.11.14
Пул потоков.


1-1099394225
Chlavik
2004-11-02 14:17
2004.11.14
var A:Array [0..0] of DWORD; Как получить A[1]?


9-1090223437
Evgeniy_K
2004-07-19 11:50
2004.11.14
Поворот на 180 градусов - DirectDraw


3-1097714633
saNat
2004-10-14 04:43
2004.11.14
ADOConnection