c++ - 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 中,画布是透视投影中的近平面。
所以我现在有了答案。
解决方案
所以你需要一个函数,它需要一个点 glm::vec2 (glm::vec2
使用matrix multiplication
相机矩阵将其转换为),然后通过值映射将其传递给 Screen。
一个有用的链接可能是这个
推荐阅读
- html - 我无法理解 CSS:first-child
- python - 如何使用 re.search 语法来匹配 pdf 文档中的关键字列表?
- arguments - 我们如何使用参数启动机器人远程服务器库?
- javascript - 使用锚标记打开模式时页面重定向到空白链接
- node.js - 为什么我的 Node.js express Server 不能在其他设备上运行?
- angular-cli - 安装 Angular Cli 时出现问题
- python - 命令 screen.fill() 不会重置屏幕上的对象
- php - 如何使用 Laravel Faker 在最小和最大字符数之间生成随机字符串
- php - Laravel - 总搜索帖子价格
- jquery - 如何在“dp.change”事件后使用选定的日期?