【问题标题】:Specify Geometry in Screen Space在屏幕空间中指定几何图形
【发布时间】:2020-08-08 05:49:17
【问题描述】:

总的来说,我对 opengl 和图形编程有点陌生。我认为我的问题很简单。我如何编写一个函数来获取屏幕坐标 (x, y) 并创建显示在屏幕上的 2d 几何图形?

【问题讨论】:

  • 从绘图的“想法”到在 OpenGL 帧缓冲区中实际获得该绘图之间还有很长的路要走。本教程的前几个步骤可以帮助理解主要元素:enib.fr/~harrouet/Data/Courses/OpenGlCoreTutorial/…
  • 我说我是 opengl 的新手,并不是完全没有头绪。我知道如何通过绑定顶点缓冲区对象和调用 glDrawElements 来绘制屏幕,​​我所需要的只是从屏幕空间到世界空间所需的数学步骤。
  • 那么也许本教程的步骤 04(变换)、05(齐次坐标矩阵)、06(投影)和 07(视点)可以带来一些有用的东西。
  • 我会尝试看看这是否有效。非常感谢!

标签: c++ opengl-es-2.0


【解决方案1】:

对于将来遇到此问题的人。这个stackoverflow线程帮助很大。 Transformations from pixels to NDC。它的基本要点是,您应该通过指定正交矩阵表示的视锥体的顶部、底部、左侧、右侧、近处和远处来创建称为正交投影矩阵的东西。如果您不确定投影矩阵,我也发现这很有帮助 https://learnopengl.com/Getting-started/Coordinate-Systems。您使用 glUniformMatrix 将正交矩阵上传到您的 GPU(至少我是这样做的)并将该矩阵乘以您分配给顶点着色器中内置变量 glPosition 的每个顶点。即

precision mediump float;
attribute vec2 a_square;
uniform mat4 projectionMatrix;

void main() {
    gl_Position = projectionMatrix * vec4(a_square, 0.0, 1.0);
}

如果您通过使用底部作为最大屏幕高度、顶部作为 0、左侧作为 0 和右侧作为最大屏幕宽度来生成正交矩阵,那么您可以指定几何图形的坐标(以像素为单位)它将通过调用 glDrawElements/glDrawArrays 来呈现。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2020-08-27
    相关资源
    最近更新 更多