Исправлено в формате 16:16. Когда вы приводите значение к «fixed», компилятор не знает, что этот формат особенный, поэтому он такой же, как если бы вы приводили к int.
Например, если point.x
равен единице, то:
(int)point.x -> 0x00000001
(GLfixed)point.x -> 0x00000001
Когда OpenGL интерпретирует 0x00000001 как значение GLfixed, OpenGL фактически видит 1/65536. Если вы хотите, чтобы OpenGL читал 1.0, тогда правильная кодировка - 0x00010000.
Когда вы переключились на float, OpenGL фактически получал 1.0.
Таким образом, вам не нужно масштабировать значения с плавающей запятой, проблема в том, что вы УЖЕ масштабируете свои фиксированные значения, а остальная часть вашего приложения уже настроена для компенсации этого. Когда используется float, этот существующий масштабный коэффициент теперь не делает то, что вы хотите.
Например, приведите ваше приложение в рабочее состояние, выполнив правильное преобразование в фиксированное (int << 16, если ваши точки хранятся в целых числах), и вы увидите ту же ошибку. Как только вы найдете это преобразование и исправите его, тогда «правильное исправление» и float должны вести себя одинаково. </p>