【问题标题】:Retained Mode to draw 2D texture image保留模式绘制 2D 纹理图像
【发布时间】:2015-02-15 06:34:45
【问题描述】:

我正在尝试使用“保留模式”来绘制我的 2D 图像(在带有 opengl 上下文的 pygame 中作为纹理加载),我发现这样做的方法是使用 VBO,但我找不到opengl 教程,它使用 VBO 绘制除图元以外的任何东西。有办法吗?

【问题讨论】:

  • 好吧,除了图元,你还要画什么?您使用基元(主要是三角形)来制作更复杂的模型。要绘制 2D 图像,只需使用两个三角形渲染一个矩形。
  • 我要渲染一个 .png 或 .jpg 文件,这和原语不一样吗?
  • 并非如此。为此,您需要读取并解压缩图像文件,将其作为纹理上传,然后在您想要图像的位置绘制一个带纹理的矩形。

标签: opengl python-3.x pygame vbo pyopengl


【解决方案1】:

是的,您可以(甚至应该?)使用 VBO 绘制 2D 图形。我在 2D 渲染中主要使用的内容如下:

我有接受顶点坐标 (VBO)、UV 坐标 (VBO)、纹理贴图和 ModelView 矩阵的着色器。我有居中的“单元框”,简单的 1x1(从 (-0.5, -0.5) 到 (0.5, 0.5))矩形,由 2 个三角形组成,UV 坐标为 (0, 0) - (1, 1)。我使用这两个相同的 VBO 来绘制所有 2D 位图:我在 ModelView 矩阵中发送位置和缩放,并更改要绘制的不同位图。

出于 GUI 目的,在左上角设置参考点可能更容易,即从 (0, 0) 到 (1, 1) 的矩形 - 如果您的着色器,您可以为此使用 UV 坐标缓冲区接受 vec2 坐标。此外,如果您设置透视图以便可以使用窗口坐标,这可能会有所帮助。

以下教程是为 C++ 编写的,但 Python 中的 OpenGL 调用也是相同的:

创建 VAO 和 VBO:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

纹理:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-5-a-textured-cube/

文字(绘制二维位图):http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-11-2d-text/

希望这会有所帮助,很抱歉我无法提供任何源代码,因为我的 OpenGL 项目是用 D 语言编写的……也可以尝试在谷歌“pygame pyopengl 2d”中找到一些源代码来解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多