Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
3-1098125982
MaxN
2004-10-18 22:59
2004.11.14
Соединение с БД


3-1097393378
Vladgul
2004-10-10 11:29
2004.11.14
Создание собственной БД


14-1098948058
Jena_
2004-10-28 11:20
2004.11.14
кидалово или нет?


14-1098870383
Tor
2004-10-27 13:46
2004.11.14
Установка Apollo SQL 6.0


4-1097075594
Newcomer
2004-10-06 19:13
2004.11.14
Resources





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский