从视口坐标转换为[-1,1]^2顶点[ENGGL]
Converting from Viewport Coordinates to [-1,1]^2 Vertex [OpenGL]
G'day!
假设我有一个鼠标点击,它在窗口中的整数值表示(窗口可以调整大小),所以它的域是(0,0)->(current_width,current_height)。有没有一种简单的方法可以"标准化"或将鼠标点击位置转换为OpenGL平台中的顶点?即R^2中具有域[-1,1]^2的点?
例如:如果当前窗口的宽度和高度分别为400和600,并且我点击了400600,我想很容易地将其转换为[1,-1]。
OpenGL中是否存在此功能,或者我必须自己编写此功能?
干杯。
您必须自己编写函数,但它很琐碎:
x_ogl = 2.0 * (x_mouse - width / 2) / width
y_ogl = -2.0 * (y_mouse - height / 2) / height
第二个公式中的否定是从鼠标/屏幕坐标中的"+ve Y down"转换为"+ve Y up"的更正常的笛卡尔坐标。
此外,更传统的做法是在X和Y坐标之间保持1:1的纵横比,较大的轴保持范围[-1,1],较小的轴具有较小的范围。
如果这是您真正喜欢的,那么在上面的两个表达式中,用max(width, height)
代替外部除法的右手边,而不是如图所示。
相关文章:
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何将一半传递给顶点着色器?
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- OpenGL 相机移动程序顶点着色器问题
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 为什么顶点数组对象会导致错误?
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 将顶点位置从顶点传递到片段着色器 - 仅在使用 Nsight 进行调试时有效
- FBX SDK 在预期 3 个顶点时返回 4 个顶点
- 从视口坐标转换为[-1,1]^2顶点[ENGGL]