Перейти к содержанию
Fire Monkey от А до Я
  • 0

TVertexBuffer, TIndexBuffer максимальный\рекомендованный размер


Mars M

Вопрос

Здравствуйте.

Мне нужно создать ~250000( а то и много больше) вершин и в два раза больше индексов, ошибок нету но отрисовываются только чуть больше половины.

С 20000-30000 вершин проверял, все нормально, то есть код рабочий.

Скорее всего дело что слишком много вершин и-или индексов.

Есть какие ограничения, кроме системных в данном случае и как оптимально сделать?

 

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Подниму тему.

Вопрос так и не решен. Разбил буфер индексов на части, все равно проблема с не полностью отрисовкой.

Отрисовываю все линиями(DrawLines), вот нормально отрисованная модель, длина векторов(Length) = 18155.

Скрытый текст

model1.thumb.png.8eb490fea6a052f6248448b0192497c8.png

 

Вот та же модель но отрисованна из большего количества линий. Отрисована не вся, меньше половины. Там где кончается зеленная линия должна быть середина. У этой модели длина векторов(Length) = 253142

Скрытый текст

model2.thumb.png.3b4fe27759ab3f3df7e8cd69ef73e3c1.png

Вот тут вот похожая проблема http://qc.embarcadero.com/wc/qcmain.aspx?d=109989 но вроде уже пофиксина.

Там пишут что в XE2 все работало при длине векторов 1000000.

Вобщем не знаю уже в какую сторону копать.

Может кто что посоветует :)

Ссылка на комментарий
  • 0

Шутку оценил, смешно :)

Но перед тем как поднимать тему все перепроверил.

В общем у меня так.

Есть текстовый файл в котором находятся координаты, выглядит вот так:

X-39.064 Y-17.289 Z-1.565
X-38.971 Y-17.382 Z-1.474
X-38.693 Y-17.660 Z-1.327
X-38.508 Y-17.845 Z-1.326
X-38.322 Y-18.030 Z-1.434
X-38.137 Y-18.216 Z-1.705
X-38.044 Y-18.308 Z-1.858
X-37.952 Y-18.401 Z-2.069
X-37.859 Y-18.494 Z-2.242
X-37.767 Y-18.586 Z-2.379

Каждая строчка это конец линии, она же начало для следующей.

Моя задача распарсить этот список, взять нужное и загнать в буфер вершин.

Для удобства сперва добавляю каждую координату в TList<TPoint3D>

ListVert.Add(Point3D(sX, sY, sZ));

    

после того как список заполнился сохраняю его в файл для проверки.

Все нужные координаты на месте.

Потом уже загоняю эти координаты в  буфер вершин

for i := 0 to ListVert.Count - 1 do
   Vert.Vertices[i] := ListVert.Items[i];

после чего опять сохраняю все вершины в файл, тоже все норм, все вершины на месте.

Ну а потом просто отрисовываю

Context.DrawLines(Vert, Ind, MatBlue, 1);

Весь код приводить не имеет смысла, там только парсинг файла, ну а так как я проверяю уже после парсинга там все нормально.

Такая проблема именно там где много вершин, с остальными проблем нету, по этому я и подумал может какие есть ограничения в FMX.

Ссылка на комментарий
  • 0
В 27.04.2017 в 09:14, Mars M сказал:

Весь код приводить не имеет смысла, там только парсинг файла, ну а так как я проверяю уже после парсинга там все нормально.

Думаю как раз таки имеет... больше шансов что кто-то поможет 

Ссылка на комментарий
  • 0

Разобрался, ошибка была в моем коде :)

При заполнении индексных буферов в какой то момент закрадывалась ошибка.

Всем спасибо.

PS: Но все хотелось бы для себя прояснить, нужно ли ограничивать размер буфера векторов, если да то от чего отталкиваться при выборе размера.

 

Ссылка на комментарий
  • 0

Теперь вот окончательно разобрался что к чему :)

Ошибку в коде что я писал уже появилась после того как я код переделал что бы буферы векторов и индексов делить на части.

Думая что ошибка найдена я вернул все к первоначальному виду и тут та же проблема.

В общем наткнулся в исходниках fmx на метод Create для индексного буфера.

TIndexBuffer.Create(const ALength: Integer; const AFormat: TIndexFormat = TIndexFormat.UInt16);

Из которого стала понятна причина проблемы :)

При создании буфера указал TIndexFormat.UInt32   и первоначальный код заработал без проблем.

Возможно плохо искал, но сколько инет перерыл не попадалось про это. Хотя на gamedev.ru читал про тоже самое но касательно OpenGL, но не обратил внимание :)

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...