У меня возникли серьезные проблемы с пониманием трансформаций, связанных с VTK. OpenGL имеет достаточно хорошую документацию, и у меня создалось впечатление, что VTK очень похож на OpenGL (это во многом). Но когда дело доходит до преобразований, это, по-видимому, совершенно другая история.В чем разница между ProjectionTransformMatrix VTK и GL_PROJECTION OpenGL?
Это хороший OpenGL документации о преобразованиях участвуют: http://www.songho.ca/opengl/gl_transform.html
Проекция матрица перспективы в OpenGL является:
Я хотел бы видеть, если эта формула применяется в ВТК даст мне проекционная матрица VTK (путем перекрестной проверки с матрицей проекции VTK).
релевантной камеры и Renderer Параметры:
camera->SetPosition(0,0,20);
camera->SetFocalPoint(0,0,0);
double crSet[2] = {10, 1000};
renderer->GetActiveCamera()->SetClippingRange(crSet);
double windowSize[2];
renderWindow->SetSize(1280,720);
renderWindowInteractor->GetSize(windowSize);
proj = renderer->GetActiveCamera()->GetProjectionTransformMatrix(windowSize[0]/windowSize[1], crSet[0], crSet[1]);
проекция матрицы преобразования я получил для этой конфигурации:
The (3,3) и (3,4) значения проекционной матрицы (скажем, индексируются от 1 до 4 для строк и столбцов) должны быть - (f + n)/(fn) и -2 * f * n/(fn) соответственно. В моих настройках камеры VTK ближайший к вам 10, а farz - 1000, и поэтому я должен получить -1.020 и -20.20 соответственно в (3,3) и (3,4) местах матрицы. Но это -1010 и -10000.
Я изменил свои значения диапазона отсечения, чтобы увидеть изменения, и позиция (3,3) всегда близка к + farz, что не имеет для меня никакого смысла. Также было бы здорово, если кто-нибудь сможет объяснить, почему он равен 3,7320 в (1,1) и (2,2) позициях. И это значение НЕ изменяется при изменении размера окна окна рендеринга. Довольно недоумение.
Я вижу в ссылке класса VTKCamera, что GetProjectionTransformMatrix() возвращает матрицу преобразования, которая отображает из координат камеры в координаты просмотра.
Это хорошее изображение преобразований, участвующих в оказании OpenGL:
OpenGL Матрица проекции является матрицей, которая отображает от глаз координат подрезать координаты. Несомненно, координаты глаз в OpenGL совпадают с координатами камеры в VTK. Но являются ли координаты клипов в OpenGL такими же, как координаты вьюрок VTK?
Моя цель состоит в том, чтобы смоделировать настоящую веб-камеру (уже откалиброванную) в VTK для рендеринга 3D-модели.
Спасибо за ваше предложение. Моя цель - имитировать камеру VTK с реальными внутренними параметрами веб-камеры. Результаты калибровки веб-камеры дают фокусное расстояние как 646 с uc = 640 и vc = 360. Используя эти три параметра, я считаю, что могу изменить матрицу проекции. Но это возможно в OpenGL, потому что документация четкая. Я не понимаю, что вы подразумеваете, взяв znear и zfar из матрицы VTK. Можете ли вы объяснить немного более подробно? – technOslerphile
@technOslerphile: В матрице VTK 'M', элемент' m22' - это просто '- (f + n)' и 'm23'' '' '' '' '' '' '' '' '' '' '' '' '' '' Таким образом, вы можете восстановить 'f' и' n'. Но вы все равно знаете их, поэтому вы можете их использовать. Чтобы превратить это в стандартную матрицу GL-матрицы 'P', просто установите' p22 = m22/(f-n) 'и' p23 = 2 * m23/(f-n) '. Обратите внимание, что это просто масштаб и сдвиг по размеру 'z', в основном отображающий диапазон матрицы [[-f, -n]' матрицы VTK обратно в диапазон [-1,1] 'GL ожидает, – derhass