Является ли Vulkan положительной осью X, указывающей на правую часть экрана? - PullRequest
0 голосов
/ 22 февраля 2020

Итак, я столкнулся с некоторыми странными вещами, когда имел дело с вулканской системой координат. Я привык к системе координат opengl, поэтому, когда я создал видовой экран в vulkan, я сделал

VkViewport viewport = {};
viewport.width = 800;
viewport.height = -600;
viewport.x = 0.0f;
viewport.y = 600;
viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f;

. Таким образом, я переворачиваю ось y, поэтому я предполагаю, что положительная ось X находится справа от экран, положительная ось Y направлена ​​вверх экрана, а положительная ось Z указывает на экран. Я прав? Но потом, когда я нарисовал простой квадрат, используя четыре вершины,

(150, 50, 0.0), (50.0, 50, 0.0), (50.0, -50, 0.0), (150.0, -50, 0.0)

с матрицей преобразования модели в качестве тождества, и просмотр матрицы как

glm::lookAt(glm::vec3(0, 0, -500), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));

и матрицы проекции

glm::perspective(glm::radians(45.0f), m_swapchainExtent.width / (float)m_swapchainExtent.height, 0.1f, 1000000.0f);

Я получил квадрат, который на самом деле находится на левой стороне изображения. Как это объяснить, или просто положительная ось X, фактически указывающая влево?

1 Ответ

2 голосов
/ 22 февраля 2020

В этой ссылке обсуждаются различия между системами координат Vulkan и OpenGL. Таким образом, диапазон Z для Vulkan находится в диапазоне [0, 1], а не [-1, 1], и ось Y перевернута, но ось X такая же.

Если вы собираетесь попытаться используйте отрицательный диапазон области просмотра, вы должны убедиться, что вы либо запросили Vulkan 1.1 или выше, либо вам требуется расширение KHR_VK_maintainance1, в противном случае указание отрицательного размера области просмотра недопустимо.

Я бы посоветовал вам начать вообще без матриц и описать свой куб в нормализованных координатах устройства, то есть в диапазоне от -1 до 1. Таким образом, вы можете сделать координаты своей квадратной вершины примерно такими:

{ 0.25, 0.25, 0.0 }
{ 0.75, 0.25, 0.0 }
{ 0.75, -0.25, 0.0 }
{ 0.25, -0.25, 0.0 }

Выполните рендеринг (хотя это не будет квадрат, если ваше соотношение сторон окна не равно 1,0) и посмотрите, не окажется ли оно там, где вы ожидаете (справа, в середине по вертикали). Если это так, то ваша проблема связана с одним из ваших преобразований матрицы, а не с API Vulkan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...