Мое приложение представляет собой карту мира с некоторыми формами. Пользователь может перетаскивать карту и масштабировать ее для навигации.
Координация мировых границ minX = -180 minY = -90 maxX = 180 maxY = 90. Вершины моих фигур также находятся в этом диапазоне координат.
Я использую ортогональную проекцию для отображения мира на экране. Когда пользователь перетаскивает или масштабирует, я просто меняю матрицу с новыми видимыми границами карты.
Приложение работает хорошо, пользователь может масштабировать и перетаскивать карту. фигуры движутся соответственно.
Я использую lighgl
как сторонний
Проблемы возникают, когда пользователь увеличивает выделение, затем вершины моих фигур начинают дрожать и в какой-то момент исчезают. Я почти уверен, что это проблема точности с плавающей запятой. потому что, когда мы увеличиваем видимую область, границы очень малы - например. minx: 30,0001 - maxX: 30,0002, поэтому y.
мои шейдеры - это базовые шейдеры, как показано ниже:
Вершинный шейдер
uniform mat4 gl_ModelViewProjectionMatrix;
attribute vec4 gl_Vertex;
void main() {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Фрагментный шейдер
void main() {
gl_FragColor = vec4(1.,0.,0.,1.);
}
Я ищу решение этой проблемы с помощью математики или WebGL ..
Попробуйте 1:
Пытался масштабировать все по факторам, но почему-то не вышло.
Например, вместо отображения minX: 30.001 он отобразит minx: 3000.1 - коэффициент 100 (и так далее для остальных значений границ). В моем шейдере я умножаю свой gl_Vertex на этот коэффициент. Но выглядит так же.