Russian Qt Forum
Ноябрь 01, 2024, 07:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] qreal как float  (Прочитано 6220 раз)
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« : Май 15, 2014, 15:48 »

Пишу приложение с использованием OpenGL, соответственно все координаты, данные матриц и т. п. должны иметь тип float. Конечно, можно использовать double, но это медленнее и памяти требует в два раза больше.
В Qt есть очень удобные QVector[2|3]D и QMatrix4x4, там уже куча готовых методов по вычислению дистанции, всяких dot product, установке проекционных матриц, поворотов, смещений и т. д.
Но все они оперируют значениями типа qreal, который на х86 является типом double.

Короче нужен float и я не знаю что делать без перекомпиляции Qt-библиотек с последующим тасканием их вместе с проектом Грустный
Как вариант писать свой велосипед, но опять же, используя Qt, хочется выжать из него максимум.
« Последнее редактирование: Май 16, 2014, 08:02 от Torvald » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Май 15, 2014, 16:00 »

Цитировать
Но все они оперируют значениями типа qreal,
Неа..
Note: By design values in the QVector3D instance are stored as float. This means that on platforms where the qreal arguments to QVector3D functions are represented by double values, it is possible to lose precision.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« Ответ #2 : Май 16, 2014, 08:01 »

Ой, действительно, какой я невнимательный Веселый
Код
C++ (Qt)
static_assert(sizeof(qreal)==sizeof(float), "qreal not equal float"); //error
static_assert(sizeof(QVector3D)==sizeof(float)*3, "QVector3D not equal float*3"); //no error
Спасибо!
Записан
vulko
Гость
« Ответ #3 : Май 20, 2014, 10:37 »

Ой, действительно, какой я невнимательный Веселый
Код
C++ (Qt)
static_assert(sizeof(qreal)==sizeof(float), "qreal not equal float"); //error
static_assert(sizeof(QVector3D)==sizeof(float)*3, "QVector3D not equal float*3"); //no error
Спасибо!

static_assert(sizeof(QVector3D)==sizeof(float)*3, "QVector3D not equal float*3"); //no error

это выражение всегда false. размер объекта класса явно больше 3-х float.
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« Ответ #4 : Май 22, 2014, 15:19 »

static_assert(sizeof(QVector3D)==sizeof(float)*3, "QVector3D not equal float*3"); //no error

это выражение всегда false. размер объекта класса явно больше 3-х float.


Ничего подобного, этот объект как раз и состоит из 3-х float. Выше ведь ответили
« Последнее редактирование: Май 22, 2014, 15:21 от Torvald » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.165 секунд. Запросов: 23.