Форум: "Игры";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизПодскажите как масштабировать модель (имеется ввиду 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.029 c