Форум программистов, компьютерный форум 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 и,... подробнее

Показать сообщение отдельно
Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
20.09.2016, 20:12     Объединение view и projection матриц
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Скажите, правильно ли я понимаию стадии pipeline'а?
Ну примерно так. А если подробнее:
1) сборка примитивов. Т.е. Определение по индексам какие номера вертексов потребуются.
2) Трансформация. Т.е. умножение координат вертекса на матрицу трансформации. (произведение Model*View*Projection) (т.е. фактически то что делает VertexShader)
3) Отсечение. т.е. обрезка отрезков/треугольников/удаление точек вышедших за пределы пирамиды/куба перспективы (как минимум желательно обрезать плоскостью near)
4) Перспетивное деление.
5) Окончательное отсечение (обрезка остальными плоскостями если в пункте 3 резали только плоскостью near)
6) Масштабирование в ScreenSpace
7) Растеризация. т.е. вычисление закрашенных примитивами точек с учетом Z координаты (z интерполируется вдоль примитива) и сортировка по глубине (т.е. z-буфер). Для прошедших z-тест фрагментов вычисление освещенности (т.е. то что делает PixelShader)
Для отрисовки нурбсов и т.п. либо применяют более другие виды интерполяции нежели интерполяция плоскости треугольник при растеризации (в конвейерах профессиональных карт) либо добавляют еще одну стадию конвейера для разбиения патча на треугольники (в обычных домашних ускорителях то что делают Hull и Domain шейдеры) Стадия добавляется между 2 и 3.
Отсечение кстати задачка со многими неизвестными. Потому как по Near очень стоит отсекать до перспективного деления (при перспективном делении все что имеет отрицательный Z будет перевернуто вверх ногами что путает все карты при отсечении отрезков/треугольников вертексы которых лежат по разные стороны плоскости z=0, а вертексы имеющие z=0 вообще вылетят с ексекпшином или получат неопределенное значение). А с другой стороны удобнее отсекать после перспективного деления так как в результате перспективного деления пирамида отсечения превращается в куб отсечения.

Ну а вообще матрицы имеют свойство накапливать трансформацию. При этом в общем то не важно они Row Major или Column Major. Важен только порядок умножения.
К примеру для RowMajor нужно умножать Model*View*Projection и вектор координат умножать на матрицу. А для column Major умножать Projection*View*Model и матрицу умножать на вектор вертекса.

Добавлено через 10 минут
Цитата Сообщение от Pro100Tom Посмотреть сообщение
У меня все матрицы значит в column major записаны.
projection в RowMajor.
в Translation ошибка.
Должно быть
1 0 0 Tx
0 1 0 Ty
0 0 1 Tz
0 0 0 1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru