Форум программистов, компьютерный форум CyberForum.ru

Объединение view и projection матриц - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Немного философии ООП http://www.cyberforum.ru/cpp/thread1808784.html
На днях на работе возник холивар с коллегами, к правильному решению пришли только на следующий день, почитав Мейерса и Саттера (один из участников холивара уже знал о правильном решении, но сторонников неправильного было большинство). Рекомендаций от упомянутых гуру пока не говорю, предлагаю поразмышлять) Итак - есть проект, в проекте используется ООП, скатываться до С считается мовитоном и...
C++ OpenCV захват видео с веб-камеры Начал изучать OpenCV. В просторах интернета нашел данный код: #include <cv.h> #include <highgui.h> #include <stdlib.h> #include <stdio.h> int main(int argc, char* argv) { // получаем любую подключённую камеру CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //cvCaptureFromCAM( 0 ); http://www.cyberforum.ru/cpp/thread1808506.html
Как компилятор обрабатывает член класса static constexpr const char* C++
Привет! Наткнулся на непонятный момент class Foo { public: static constexpr const char* PTR = "value"; }; без constexpr не компилируется. Вопрос - как компилятора без линкера разруливает это дело, ведь constexpr value ему нужен на этапе компиляции? Если он это пережевывает, почему тогда constexpr необходим?
C++ Распознование животных на изображении
Стала интересна тема распознавания образов на изображениях. Программа должна получать картинку с животным и определить какое это животное(как я понимаю, задача не простая, но все же) . Подскажите в какую сторону копать, какие есть статьи/книги/сайты посвященные этой теме. Слышал про OpenCV, но я уверен, что есть еще что-то похожее.
C++ Как подружить компьютер c МК через USB http://www.cyberforum.ru/cpp/thread1807335.html
Здравствуйте, уважаемые форумчане! Никогда не работал с USB нужна помощь. Есть компьютер под управлением Windows 7, плата разработки DE0-Nano-SoC. Необходимо написать программу для ОС, которая могла бы определять плату как USB устройство. В DE0-Nano-SoC есть два USb-интерфейса UART to USB (COM-порт) и USB OTG (FT232R). Думаю подключать через USB OTG. Пишу как в Microsoft Visual Stidio...
C++ Различия между Java и Си++ Я раньше программировал на си++,сейчас начал на java,нужно понять основные различия 1. Каковы отличия в структуре программы вычисления простого арифметического выражения на языке Си и Си++ от структуры программы на языке Java. 2. Если пакет содержит только один класс, нужно ли указывать класс, в котором находится функция main? 3. Могут ли в одном пакете определено несколько функций main и,... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
23.09.2016, 19:33     Объединение view и projection матриц
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Column-Major
Это row-major, то, что и требовалось, соответствует привычной форме записи линейных уравнений.

Цитата Сообщение от Pro100Tom Посмотреть сообщение
view матрица: абсолютно тоже самое, только инверсирована
Нет. Инверсии там быть не должно никакой. Задача model - перенести точки из собственной СК объекта в СК сцены, задача view-матрицы перенести точки из СК сцены в СК наблюдателя (где глаз в нулевой позиции, направление взгляда по оси Z и так далее). Как правило, view-матрица содержит 2 преобразования: перенос на координаты наблюдателя, взятые со знаком минус (очевидно, что после этого он окажется в начале координат, что и требовалось) и поворот, совмещающий направление взгляда с осью Z и направление вверх с осью Y.

Цитата Сообщение от Pro100Tom Посмотреть сообщение
все эти матрицы перемножаю
Порядок перемножения матриц не зависит от row-major или column-major, и судя по исходникам, тут он соблюдён.

Цитата Сообщение от Pro100Tom Посмотреть сообщение
Как я перемножаю вертекс на матрицу:
Если это не настоящий код, а просто иллюстрация порядка перемножения, то порядок правильный, соответствующий row-major order. Если настоящий код, то это ужас-ужас (нельзя же пересчитывать компоненту, опираясь на уже изменённые предыдущие компоненты).
После перемножения не забываем делить итоговый вектор на его компоненту w (нормализация).

Цитата Сообщение от Pro100Tom Посмотреть сообщение
чтобы получить transformation матрицу я перемножаю
Перемножать надо в той последовательности, в которой применяются эти преобразования. Если у нас есть объект в центре, то translation(10, 0, 0) * scale (2) отнесёт его на 20 единиц, а scale(2) * translation(10, 0, 0) на 10 единиц.

Добавлено через 6 минут
Забыл упомянуть: порядок умножения зависит от того, в какой СК выражено преобразование. Если мы выражаем преобразования, всё время оставаясь в исходной СК и наблюдая за изменяющимся от наших действий объектом, то перемножать надо в обратном порядке. Если же после каждого преобразования мы следуем в новую СК вслед за объектом (при этом он для нас остаётся неизменным и неподвижным), то перемножение идёт в прямом порядке.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru