【问题标题】:Render to texture in Delphi using OpenGL [closed]使用 OpenGL 在 Delphi 中渲染到纹理 [关闭]
【发布时间】:2013-05-11 17:28:08
【问题描述】:

我正在为我不那么简单的 OpenGL 游戏制作简单的 GUI。由于有一个包含大量控件的大菜单,我将控件分组并将它们放入可以通过主菜单中的按钮访问的不同窗口中。所以现在我想用每个窗口的可点击缩略图替换按钮,这就是为什么我需要将 GUI 渲染为纹理。

目前我有一台装有 Windows 7 和 Geforce 210 显卡的计算机,它支持 OpenGL 最高 3.3.0 版本(但我不在乎我将使用哪个版本)。我有 Delphi 的 'dglOpenGL.pas' 库。我想用纹理控件来渲染这些窗口,但因为我在这些事情上很n00b,所以我做不到(我尝试了 C# 教程,但到目前为止没有工作结果)。任何帮助将不胜感激。

【问题讨论】:

  • 如果您正在制作 2D GUI 并且不关心速度,为什么不使用纯 GDI?
  • @Andreaas Rejband:很好的论据,但我的 GUI 是用于 OpenGL 游戏的 :)

标签: delphi opengl windows-7 2d render-to-texture


【解决方案1】:

OpenGL 中的渲染到纹理涉及创建帧缓冲区对象 (FBO) 并将其附加到纹理。查看the documentation for framebuffer objects 了解基本概述。

一般的工作流程是这样的:

  • 使用glGenFramebuffers 创建一个帧缓冲区对象
  • 使用glBindFramebuffer 激活帧缓冲区
  • 使用glFramebufferTexture 将帧缓冲区附加到要渲染到的纹理上
  • 请致电glCheckFramebufferStatus 以确保其有效。
  • 设置视口以匹配您正在渲染的纹理的尺寸。 (这通常涉及调用 glViewport 和 glOrtho,我相信你已经熟悉了,所以我不会在这里链接它们。)
  • 进行渲染。
  • 完成后,停用 FBO(再次调用 glBindFramebuffer 并将 0 作为 FBO ID 值传递)并重置您的视口。
  • 您渲染的任何内容现在都应该存在于纹理中。

【讨论】:

  • 'glCheckFramebufferStatus' 返回 0 :(
  • @Roberts:根据文档,这意味着发生了某种错误。尝试拨打glGetError 看看结果是否有帮助。如果没有,请在此处发布您尝试使用的代码作为新问题(包括错误结果),看看我们是否可以提供帮助。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2014-07-22
  • 2013-10-05
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多