Главная страница
    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.45 MB
Время: 0.037 c
1-1098995456
Khabibulin
2004-10-29 00:30
2004.11.14
Replace System Tray


3-1097824876
nv
2004-10-15 11:21
2004.11.14
MIDAS - информация о клиенте.


3-1097511063
Vsevolod
2004-10-11 20:11
2004.11.14
Использование фильтра


1-1099292775
snake1977
2004-11-01 10:06
2004.11.14
Таймер в потоке


14-1099059159
Kerk
2004-10-29 18:12
2004.11.14
США могут повторить судьбу СССР





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский