Могу ли я получить координаты текстуры в виде координат пикселей в 2D-игре?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я получить координаты текстуры в виде координат пикселей в 2D-игре?

Сообщение Anonymous »

У меня возникла проблема с моей 2D-игрой на C++/OpenGL.
Мне нужно каким-то образом получить пиксельные координаты (предпочтительно координаты glfw) текстуры, которая была визуализирована на экран. Конечная цель — иметь возможность щелкнуть текстуру в окне и получить правильное имя текстуры. Чтобы иметь возможность выполнять попиксельное столкновение щелчком мыши, мне нужно знать, где именно находится текстура в окне.
Однако я очень запутался в различных системах координат и как добраться до формы координат, которую я ищу.
Может ли кто-нибудь помочь мне, как начать работу, или, возможно, у кого-то была та же проблема, что и у меня?
Теперь к фактам:
Это моя матрица mvp:

Код: Выделить всё

glm::mat4 Game::calculateMvpMatrix(glm::vec3 position, float zRotationInDegrees, glm::vec3 scale){
glm::mat4 model = glm::mat4(1.0f);
model = glm::translate(model, position);
model = glm::scale(model, scale);
model = glm::rotate(model, glm::radians(zRotationInDegrees), glm::vec3(0.0f, 0.0f, 1.0f));

glm::mat4 view = glm::lookAt(glm::vec3(0.0f, 0.0f, 90.0f),
glm::vec3(0.0f, 0.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f));

int windowWidth, windowHeight;
glfwGetWindowSize(window, &windowWidth, &windowHeight);
glm::mat4 projection = glm::ortho(0.0f, 8.0f, 0.0f, 4.5f, 0.1f, 100.0f);

return projection * view * model; }
Вот как я использую это в шейдере:

Код: Выделить всё

layout (location = 0) in vec3 aPos; ...
uniform mat4 mvp;

void main() {
gl_Position = mvp * vec4(aPos, 1.0); ...
Затем у меня есть позиции вершин текстуры в моем рендерере:

Код: Выделить всё

        data.vertexPositions[0] = {0.5f, -0.5f, 0.0f, 1.0f};
data.vertexPositions[1] = {-0.5f, -0.5f, 0.0f, 1.0f};
data.vertexPositions[2] = {-0.5f, 0.5f,  0.0f, 1.0f};
data.vertexPositions[3] = {0.5f, 0.5f, 0.0f, 1.0f};
который я затем преобразую в своем рендерере:

Код: Выделить всё

 void BatchRenderer::DrawQuad(const glm::vec3& position, float rotation, const glm::vec2& size, unsigned int textureID,
const glm::vec4& texColor, float texAlpha)
{
...

glm::mat4 transform = glm::translate(glm::mat4(1.0f), {position.x, position.y, 0.0f}) *
glm::rotate(glm::mat4(1.0f), glm::radians(rotation), {0.0f, 0.0f, 1.0f}) *
glm::scale(glm::mat4(1.0f), {size.x, size.y, 1.0f});

data.quadBufferPtr->Position = transform * data.vertexPositions[0];
data.quadBufferPtr->Color = texColor;
data.quadBufferPtr->TexCoords = {0.0f, 0.0f};
data.quadBufferPtr->TexID = texIndex;
data.quadBufferPtr->TexAlpha = texAlpha;
data.quadBufferPtr++;

...
Кто-нибудь знает, как я могу получить координаты пикселей glfw или даже просто нормализованные координаты экрана из этой информации?

Подробнее здесь: https://stackoverflow.com/questions/782 ... in-2d-game
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»