首页 > 解决方案 > OpenGL 将 ClipCoord 转换为 ScreenCoord

问题描述

我想将 ClipCoord 转换为 ScreenCoord,但我不知道获取 Canvas 宽度和高度的正确方法是什么。(画布 = 图像平面中的可绘制区域)

glm::vec4 clipCoords = vec4f(0.1f, 0.3f, 1.0f, 1.0f) // random point

float canvasWidth = 2;
float canvasHeight = 2;

GLfloat ndcX = (clipCoords.x + canvasWidth / 2.0f) / canvasWidth;
GLfloat ndcY = (clipCoords.y + canvasHeight / 2.0f) / canvasHeight;

GLint pixelX = ndcX * SCREEN_WIDTH;
GLint pixelY = (1 - ndcY) * SCREEN_HEIGHT;

在 OpenGL 中,画布是透视投影中的近平面。

我找到了同样问题的旧线程

所以我现在有了答案。

标签: c++openglglm-math

解决方案


所以你需要一个函数,它需要一个点 glm::vec2 (glm::vec2使用matrix multiplication相机矩阵将其转换为),然后通过值映射将其传递给 Screen。

一个有用的链接可能是这个


推荐阅读