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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Почему не работает cin>> в Sublime Text 3? http://www.cyberforum.ru/cpp/thread1809252.html
Доброго времени суток, подскажите пожалуйста, можно ли в редакторе кода Sublime Text 3 вводить данные во встроенную снизу панель при запуске программы? Выводить данные она выводит, а вот вводить не позволяет.
C++ Скопировать объект, на который ссылается указатель на абстрактный класс Доброго времени суток. У меня такое задание: написать программу символьного дифференцирования, т.е. пользователь пишет функцию f(x), а программа выводит ее производную как f'(x). Так вот есть базовый абстрактный класс, который дан в условии задачи class Expression { public: virtual Expression *diff()=0; //функция дифференцирования virtual void print()=0; //функция вывода... http://www.cyberforum.ru/cpp/thread1809084.html
C++ Немного философии ООП
На днях на работе возник холивар с коллегами, к правильному решению пришли только на следующий день, почитав Мейерса и Саттера (один из участников холивара уже знал о правильном решении, но сторонников неправильного было большинство). Рекомендаций от упомянутых гуру пока не говорю, предлагаю поразмышлять) Итак - есть проект, в проекте используется ООП, скатываться до С считается мовитоном и...
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 );
C++ Как компилятор обрабатывает член класса static constexpr const char* http://www.cyberforum.ru/cpp/thread1808427.html
Привет! Наткнулся на непонятный момент class Foo { public: static constexpr const char* PTR = "value"; }; без constexpr не компилируется. Вопрос - как компилятора без линкера разруливает это дело, ведь constexpr value ему нужен на этапе компиляции? Если он это пережевывает, почему тогда constexpr необходим?
C++ Получить график дат санитарных дней в указанном году задача: Городской рынок имеет санитарный день каждый понедельник месяца . Дано номер года и указано день недели , на который приходится 1 января. Получить график дат санитарных дней в указанном году. Помогите пожалуйста решить задачу подробнее

Показать сообщение отдельно
Pro100Tom
 Аватар для Pro100Tom
69 / 28 / 7
Регистрация: 29.10.2012
Сообщений: 326
23.09.2016, 17:51  [ТС]     Объединение view и projection матриц
Создам отдельный проект где только перемножать матрицы и векторы буду.

Скажите правильно ли всё делаю?
Column-Major

translation
1 0 0 Tx
0 1 0 Ty
0 0 1 Tz
0 0 0 1

rotation (y)
cos(a) 0 0 sin(a)
0 1 0 0
-sin(a) 0 0 cos(a)
0 0 0 1

scale
Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
0 0 0 1

view матрица: абсолютно тоже самое, только инверсирована (инверсию проверю на wolfram alpha)
projection
s 0 0 0
0 s 0 0
0 0 a -1
0 0 b 0
где s = 1 / tan(0.5 * fov * pi / 180)
a = -f / (f - n)
b = -f * n / (f - n)

все эти матрицы перемножаю как transformation * view * projection

как я это делаю?
Код
x 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

transformationView[0][0] = 
	transformation[0][0] * view[0][0] +  
	transformation[0][1] * view[1][0] +
	transformation[0][2] * view[2][0] + 
	transformation[0][3] * view[3][0];


0 x 0 0
0 0 0 0
0 0 0 0
0 0 0 0

transformationView[0][1] = 
	transformation[0][0] * view[0][1] +  
	transformation[0][1] * view[1][1] +
	transformation[0][2] * view[2][1] + 
	transformation[0][3] * view[3][1];
	
	
0 0 x 0
0 0 0 0
0 0 0 0
0 0 0 0
	
transformationView[0][2] = 
	transformation[0][0] * view[0][2] +  
	transformation[0][1] * view[1][2] +
	transformation[0][2] * view[2][2] + 
	transformation[0][3] * view[3][2];
	
	
0 0 0 x
0 0 0 0
0 0 0 0
0 0 0 0
	
transformationView[0][3] = 
	transformation[0][0] * view[0][3] +  
	transformation[0][1] * view[1][3] +
	transformation[0][2] * view[2][3] + 
	transformation[0][3] * view[3][3];
	

	
0 0 0 0
x 0 0 0
0 0 0 0
0 0 0 0

transformationView[1][0] = 
	transformation[1][0] * view[0][0] +  
	transformation[1][1] * view[1][0] +
	transformation[1][2] * view[2][0] + 
	transformation[1][3] * view[3][0];
	
	
0 0 0 0
0 x 0 0
0 0 0 0
0 0 0 0

transformationView[1][1] = 
	transformation[1][0] * view[0][1] +  
	transformation[1][1] * view[1][1] +
	transformation[1][2] * view[2][1] + 
	transformation[1][3] * view[3][1];
и так далее...

Добавлено через 3 минуты
Как я перемножаю вертекс на матрицу:
Код
vertex.x = 
	matrix[0][0] * vertex.x +
	matrix[0][1] * vertex.y +
	matrix[0][2] * vertex.z +
	matrix[0][3] * vertex.w;
	
где [0][1] - это
0 x 0 0
0 0 0 0
0 0 0 0
0 0 0 0


vertex.y = 
	matrix[1][0] * vertex.x +
	matrix[1][1] * vertex.y +
	matrix[1][2] * vertex.z +
	matrix[1][3] * vertex.w;
	
где [1][2] - это
0 0 0 0
0 0 x 0
0 0 0 0
0 0 0 0
грубо говоря: первый индекс - вниз, второй - вправо

Добавлено через 3 минуты
Цитата Сообщение от Pro100Tom Посмотреть сообщение
где s = 1 / tan(0.5 * fov * pi / 180)
a = -f / (f - n)
b = -f * n / (f - n)
fov - у меня 10.
near = -1
far = 1

Добавлено через 2 минуты
чтобы получить transformation матрицу я перемножаю:
translation * rotation * scaling.
(сначала первые две, а потом то, что получится на scaling).
 
Текущее время: 20:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru