【问题标题】:Opengl and DirectX Viewport and RendertargetsOpengl 和 DirectX 视口和渲染目标
【发布时间】:2014-10-26 16:15:09
【问题描述】:

所以我仍在尝试在 OpenGL 和 DirectX 中获得相同的结果。

现在我的问题是使用渲染目标和视口。

到目前为止我学到了什么:

  • 如果调整窗口大小,DirectX 的 Backbuffer 会拉伸 -- 渲染纹理的大小变化
  • 如果调整窗口大小,则调整 OpenGL 的 Backbuffer 大小 -- 渲染的纹理停留在它被渲染的地方

现在我在这里所做的是将 OpenGL 的视口更改为窗口大小。现在两者都有相同的结果,渲染的纹理被拉伸。 一个骗局: -OpenGL 的 Viewport 的 Size 不能像 DirectX 那样设置,因为它被设置为 Window Size。

现在在渲染 Rendertarget 时会发生这种情况:

  • DirectX:大小很重要,如果 Size 大于 Backbuffer,则纹理只占很小的位置,如果 Size 小于 Backbuffer,则纹理占很多位置
  • OpenGL:大小无关紧要,渲染的上下文保持不变/拉伸。

现在我的问题是:

如何在 OpenGL 和 DirectX 中获得相同的结果? 我想要我在 OpenGL 中的 DirectX 中得到的相同结果。到目前为止,我的想法是正确的还是有更好的想法?

【问题讨论】:

  • 如果你想复制 DirectX 的行为,然后绘制到一个 Frambuffer 对象并使用 GL_LINEAR 采样将该 FBO 传送到默认帧缓冲区(窗口)。 这就是你想要的行为,对吧?哪里帧缓冲区分辨率不随窗口调整大小而变化?
  • @AndonM.Coleman 我将帧缓冲区中的所有内容渲染为纹理,然后绘制该纹理。如果我使用 blit,我的纹理不会通过着色器,对吗?我想要的基本上是,如果我更改 FBO 纹理的大小,它也会影响纹理在其上的渲染方式,就像在 DirectX 中一样。这行得通吗?
  • 嗯,我不明白你的意思。在调整窗口大小方面,D3D 和 GL 之间唯一相关的区别与调整帧缓冲区大小的方式有关。 GL 会自动执行此操作,在 D3D 中您必须自己执行此操作。但是,如果您使用 FBO 进行绘图,则可以防止 GL 在调整窗口大小时调整您绘制到的帧缓冲区的大小。

标签: c++ opengl directx


【解决方案1】:

我所做的:将 OpenGL 中的所有内容绘制到 FrameBuffer 并将其 blit 到 backBuffer。现在内容可以重新缩放,就像在 DirectX 中一样。

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多