#c #sfml
#c #sfml
Вопрос:
У меня есть сетка, в которой я использую один объект sf: RectangleShape, и, изменяя его параметры внутри цикла, я могу заполнить ими большую область. Теперь я хочу сделать сетку видимой, чтобы помочь с размещением прямоугольников.
Но здесь возникает проблема.
Если я буду использовать rectPtr->getRect()->setOutlineThickness(-0.5f);
Примечание: его указатель создан из пользовательского класса. По неизвестным причинам конечная программа становится действительно медленной и нестабильной. С ней все в порядке setOutlineThickness(0.f);
. Я использую отрицательное значение из-за этой сетки, но проблем нет. он делает то же самое с положительными значениями.
Есть ли какой-нибудь способ использовать setOutlineThickness();
функцию, не замедляя работу программы?
Может быть, это какая-то ошибка?
Я использую sf::Transform
матрицу 3×3 at window.draw()
, может быть какое-то нарушение?
средний FPS с setOutlineThickness(-1.f) = 16.fps
средний FPS с setOutlineThickness(0.f) = 60.fps
большое спасибо
Комментарии:
1. Попробуйте использовать целочисленное значение (1.f вместо 0.5f). Я предполагаю, что использование такого маленького значения приводит к дополнительным вычислениям (вы не можете нарисовать половину пикселя, поэтому ваша видеокарта должна найти способ его визуализации).
2. Я попробовал. У него нет проблем с 0.5f. Не имеет значения, что находится внутри. 1, 1.f,.1.f ,0.5f . Если есть что-то отличное от 0, это каким-то образом замедляет работу конечного приложения.
3. Ну, тот факт, что это замедляет работу приложения, неизбежен. Я не знаю точно, как контуры работают с SFML, но я предполагаю, что для этого требуется отрисовка 4 дополнительных прямоугольников (16 вершин).
4. Если вам нужна сетка, возможно, лучшим вариантом будет рисовать только линии с использованием вершин
5. Я думаю, это будет лучший вариант. Вы правильно поняли, что она может создать 4 дополнительных прямоугольника. Но это устарело. Этот объект с контурами — это всего лишь одна прямоугольная фигура в куче, которая рисуется несколько раз с разными позициями. 4000 раз нарисован один объект. Итак, по базовой логике,. всего должно быть только 4 прямоугольных формы, заданных контуром.