Mars M Опубликовано 21 апреля, 2017 Поделиться Опубликовано 21 апреля, 2017 Здравствуйте. Мне нужно создать ~250000( а то и много больше) вершин и в два раза больше индексов, ошибок нету но отрисовываются только чуть больше половины. С 20000-30000 вершин проверял, все нормально, то есть код рабочий. Скорее всего дело что слишком много вершин и-или индексов. Есть какие ограничения, кроме системных в данном случае и как оптимально сделать? Цитата Ссылка на комментарий
0 Mars M Опубликовано 26 апреля, 2017 Автор Поделиться Опубликовано 26 апреля, 2017 Подниму тему. Вопрос так и не решен. Разбил буфер индексов на части, все равно проблема с не полностью отрисовкой. Отрисовываю все линиями(DrawLines), вот нормально отрисованная модель, длина векторов(Length) = 18155. Скрытый текст Вот та же модель но отрисованна из большего количества линий. Отрисована не вся, меньше половины. Там где кончается зеленная линия должна быть середина. У этой модели длина векторов(Length) = 253142 Скрытый текст Вот тут вот похожая проблема http://qc.embarcadero.com/wc/qcmain.aspx?d=109989 но вроде уже пофиксина. Там пишут что в XE2 все работало при длине векторов 1000000. Вобщем не знаю уже в какую сторону копать. Может кто что посоветует Цитата Ссылка на комментарий
0 ENERGY Опубликовано 26 апреля, 2017 Поделиться Опубликовано 26 апреля, 2017 (изменено) Скорее всего проблема в 17 строчке.. Изменено 26 апреля, 2017 пользователем ENRGY Цитата Ссылка на комментарий
0 Mars M Опубликовано 27 апреля, 2017 Автор Поделиться Опубликовано 27 апреля, 2017 Шутку оценил, смешно Но перед тем как поднимать тему все перепроверил. В общем у меня так. Есть текстовый файл в котором находятся координаты, выглядит вот так: 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 Rusland Опубликовано 28 апреля, 2017 Поделиться Опубликовано 28 апреля, 2017 В 27.04.2017 в 09:14, Mars M сказал: Весь код приводить не имеет смысла, там только парсинг файла, ну а так как я проверяю уже после парсинга там все нормально. Думаю как раз таки имеет... больше шансов что кто-то поможет Цитата Ссылка на комментарий
0 Mars M Опубликовано 29 апреля, 2017 Автор Поделиться Опубликовано 29 апреля, 2017 Разобрался, ошибка была в моем коде При заполнении индексных буферов в какой то момент закрадывалась ошибка. Всем спасибо. PS: Но все хотелось бы для себя прояснить, нужно ли ограничивать размер буфера векторов, если да то от чего отталкиваться при выборе размера. Цитата Ссылка на комментарий
0 Mars M Опубликовано 29 апреля, 2017 Автор Поделиться Опубликовано 29 апреля, 2017 Теперь вот окончательно разобрался что к чему Ошибку в коде что я писал уже появилась после того как я код переделал что бы буферы векторов и индексов делить на части. Думая что ошибка найдена я вернул все к первоначальному виду и тут та же проблема. В общем наткнулся в исходниках fmx на метод Create для индексного буфера. TIndexBuffer.Create(const ALength: Integer; const AFormat: TIndexFormat = TIndexFormat.UInt16); Из которого стала понятна причина проблемы При создании буфера указал TIndexFormat.UInt32 и первоначальный код заработал без проблем. Возможно плохо искал, но сколько инет перерыл не попадалось про это. Хотя на gamedev.ru читал про тоже самое но касательно OpenGL, но не обратил внимание Евгений Корепов 1 Цитата Ссылка на комментарий
Вопрос
Mars M
Здравствуйте.
Мне нужно создать ~250000( а то и много больше) вершин и в два раза больше индексов, ошибок нету но отрисовываются только чуть больше половины.
С 20000-30000 вершин проверял, все нормально, то есть код рабочий.
Скорее всего дело что слишком много вершин и-или индексов.
Есть какие ограничения, кроме системных в данном случае и как оптимально сделать?
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.