Мне нужно каким-то образом получить пиксельные координаты (предпочтительно координаты 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++;
...
Подробнее здесь: https://stackoverflow.com/questions/782 ... in-2d-game
Мобильная версия