问题标签 [rendertarget]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2382 浏览

opengl - 如何渲染到 OpenGL Cubemap 纹理的一个面

我正在制作一个立方体贴图渲染目标类。我已经有一个可以正常工作的 2D 了。但是对于这个立方体贴图渲染目标类,我希望能够按照我的意愿渲染到特定的面。也许我想在“X+”面上渲染圆形,但在“Y+”面上渲染三角形。

这就是我的班级的样子

这就是我的创建函数的样子

这就是我的绑定函数的样子

//这就是我的解绑函数的样子

过去一周我做了很多研究。我似乎无法找到一种方法,我可以通过一些方法来绑定我的整个立方体贴图,而不是绑定我的立方体贴图的一个面。这是我的总体目标。我知道在 DirectX 中,您只需抓取 6 个面并手动处理它们,但我如何手动处理 openGL 立方体贴图上的每个面?

0 投票
0 回答
2925 浏览

c++ - 渲染到纹理时的 DX11 Alpha 混合

最终编辑:

已解决...只需要深入了解 Alpha 混合的工作原理。我应该有:oBlendStateDesc.RenderTarget[a].DestBlendAlpha = D3D11_BLEND_ZERO; ...设置为 D3D11_BLEND_ONE 以保留 alpha。

当渲染到后台缓冲区时,一旦颜色混合正常,就不会注意到问题,这就是最终输出。当渲染到纹理时,同样的事情也适用,然后将纹理渲染到后台缓冲区,不正确的 alpha 在将纹理错误地混合到后台缓冲区中起作用。

然后我遇到了另一个问题,alpha 似乎正在下降。这是因为颜色混合了两次,例如...

渲染成纹理...

现在...

渲染到后台缓冲区...

为了解决这个问题,在将纹理渲染到后台缓冲区时,我使用相同的混合状态,但将 SrcBlend 更改为 D3D11_BLEND_ONE,这样颜色就不会混合两次。

希望这可以帮助其他有类似问题的人....

编辑结束

为了提高性能,我试图渲染一串永远不会变成纹理的文本,以节省每次渲染每个单独的字符。

由于我严格使用 2D 渲染,因此我在启用 Alpha 混合的同时禁用了深度和模板测试。

问题是似乎没有发生任何 alpha 混合,最后绘制的任何内容都会用自己的数据覆盖当前像素......没有混合。

我使用一个我不会改变的混合状态。渲染到后台缓冲区时,混合工作正常。将最终纹理渲染到后台缓冲区时,混合也可以正常工作。只是当我渲染到混合似乎失败的纹理时。

以下是我设置单一混合状态的方法:

在渲染到纹理时,我是否缺少任何额外的步骤来启用混合?

编辑:如果我将 AlphaToCoverageEnable 设置为 true,它会混合,但看起来很糟糕。这至少证实了它使用相同的混合状态......只是根据渲染到后缓冲区或纹理时的不同工作方式:/这是我的纹理描述......

编辑:这是一些可视化... 文本

  1. 渲染到后备缓冲区 - 启用 AlphaBlending。
  2. 渲染到纹理 - 启用 AlphaBlending。
  3. 渲染到后备缓冲区 - 禁用 AlphaBlending。
  4. 取自字体文件的字母 T

*当禁用 AB 渲染时,字母完全匹配(比较 4 和 3)

*在启用 AB 的情况下渲染到后台缓冲区时,字母渲染略微(几乎不明显)褪色但仍然混合(比较 4 和 1)

*在启用 AB 的情况下渲染到纹理时,字母渲染得更加明显,而根本没有混合。(比较 4 和 2)

不知道为什么颜色会在启用 alpha 混合的情况下被洗掉......但也许它是一个线索?

编辑:如果我清除渲染目标纹理说...... 0.0f,0.0f,1.0f,1.0f(RGBA,蓝色)......这是结果: 在此处输入图像描述

只有 alpha > 0.0f & < 1.0f 的像素与颜色混合。另一个线索,但我不知道如何解决这个问题......

0 投票
1 回答
193 浏览

xna - 缩放 RenderTarget2D 不会缩放 SourceRectangles

我在 XNA 中开发了一个 2D match3 游戏。核心逻辑和动画就完成了。我使用 RenderTarget2D 绘制整个板。该板有 8 行和 8 列,具有 64x64 纹理(瓷砖),可以单击和移动。为了捕获鼠标交叉点,我对每个图块使用 SourceRectangles。当然,SourceRectangle 与纹理具有相同的大小 - 64x64。

我想使用 RenderTarget2D 缩小整个板,以支持不同的显示器分辨率和方面。首先,我在 RenderTarget2D 中绘制所有图块。然后我用浮点系数缩小 RenderTarget2D。最后我在屏幕上绘制了 RenderTarget2D。结果,整个板子被正确地缩小了(例如,所有纹理都从 64x64 缩小到 50x50),但是 SourceRectagles 没有被缩放,它们仍然是 64x64,并且没有为正确的图块捕获鼠标交叉点。

为什么缩放 RenderTarget2D 不能处理这个问题?我该如何解决这个问题?

0 投票
1 回答
414 浏览

windows-phone-7 - 在 XNA 中加载调整大小的纹理

我正在为 Windows Phone XNA 开发并希望加载尺寸较小的纹理以减少不需要完整图像的内存影响。

我目前的解决方案是使用一个渲染目标来绘制并返回该渲染目标作为一个较小的纹理来使用:

这样做的原因是纹理被调整了大小,但从内存使用情况来看,纹理“texLoaded”似乎没有被释放。当使用未注释的 Dispose 方法时,SpriteBatch.End() 将抛出一个已处理的异常。

任何其他方式来加载调整大小以减少内存使用的纹理?

0 投票
1 回答
399 浏览

c# - Windows Phone 中的 XNA RenderTarget2D

我想在我的 Windows Phone 7 XNA 应用程序中使用 RenderTarget2D。但是,我不成功,因为将绘图切换到我的渲染目标然后切换回来(通过使用 SetRenderTarget(null) )导致我的整个屏幕被绘制为蓝色,因此覆盖了在切换到我的渲染目标之前绘制的任何内容。我不确定这是否是预期的行为。

事实上,很容易重现这种行为。只需为 Windows Phone 7 创建一个简单的 XNA 游戏并使用以下代码:

我正在创建我的渲染目标,如下所示:

因此,我做错了什么?

谢谢。

0 投票
1 回答
861 浏览

xna - 在哪里调用 SetRenderTarget?

我想在SpriteBatch.Begin和之间更改我的 RenderTargets SpriteBatch.End。我已经知道这有效:

但我真的很想让这项工作:

我曾经见过有人这样做,但我没有找到任何原因。

编辑:关于我为什么要这样做的更多信息:

在我的项目中,我使用 SpriteSortMode.Immediate(以便能够在需要时更改 BlendState),并且我只是遍历一个排序的精灵列表,然后将它们全部绘制出来。但是现在我想在一些精灵上应用多通道着色器,但不是全部!我对着色器很陌生,但据我了解,我必须使用第一遍将我的精灵绘制在中间精灵上,并使用第二遍在最终渲染目标上绘制中间精灵。(我使用的是高斯模糊像素着色器)。这就是为什么我想在我想要的目标上绘制,使用所需的着色器,而不必重新开始/结束。

0 投票
1 回答
165 浏览

arguments - 如何解决 RenderTarget2D 的此参数错误?

作为初学者,我正在使用一些 XNA 代码。所以我使用本教程,但似乎我正在做某事,我不知道为什么。

http://www.xnadevelopment.com/tutorials/theroadnottaken/theroadnottaken.shtml

我参与了路径冲突,这就是我的代码的编写方式!

我已经声明了 mTrackREnder,并且 mTrackREnderRotated 具有类级别的对象。

好吧,问题是什么,我对他们俩都收到了这个错误:

错误 3 'Microsoft.Xna.Framework.Graphics.RenderTarget2D' 不包含采用 4 个参数的构造函数'

我究竟做错了什么?我该如何解决这个问题?

0 投票
1 回答
131 浏览

c# - 游戏最小化时 RenderTarget 内容发生变化

所以我正在为 XNA 开发一个 GUI 库,我遇到了一个我找不到解决方案的问题。我经常使用渲染目标,这本身很烦人,但我有一个非常奇怪和具体的问题。

在我的 ProgressBar 类中,当元素经过验证并且对象大小已更改时,我正在绘制各个组件。如果对象已验证但对象大小未更改,则我使用填充的渲染目标作为纹理将最终产品绘制到缓冲区纹理(同样是渲染目标)上。现在,每当我最小化应用程序并再次使用 Tab 时,进度条的背景层都会在其上方留下条纹纹理的印记。渲染目标设置为保留内容,我确保设置了正确的渲染目标。还清除 graphicsDevice(就在“实际绘图”行下方)不会做任何事情。为什么?

所以基本上游戏会创建该区域的屏幕截图,并将其绘制到我的纹理中。我勒个去?

这是进度条的代码:

0 投票
1 回答
488 浏览

c# - XNA 缩放和渲染目标

我正在开发适用于 Windows 的自上而下的战略/RPG/塔防 XNA 游戏,但在扩展时遇到了问题。

我的显示模式是 1680 X 1050,这就是我设置 PreferredBackBuffer 的宽度和高度。

我发现当我使用我的相机对象放大和缩小时(更改传递给 SpriteBatch.Begin 方法的矩阵上的比例,它会改变我的精灵的比例......但我仍然仅限于 BackBuffer (0,0,1680,1050)...

我可以使用 RenderTarget 之类的东西来扩展在“地图”上缩放/平移时可访问的实际区域吗?

我正在考虑把它做成 5000 X 3125 之类的东西......

关于我应该如何处理这个问题的任何想法/例子?

我添加了一段我正在经历的视频... http://www.youtube.com/watch?v=jIiAeXbAnec

为了记录,我还在Stack Exchange - Game Development上发布了这个问题

0 投票
2 回答
423 浏览

directx - Direct3D:输出 4 个颜色通道和一个单独的 alpha?

我想知道的事情,不幸的是,这可能是不可能的,但我想我会问 - 我正在设置一个延迟照明着色器,它接收 2 个纹理并输出到 2 个渲染目标。他们的渠道是:

很简单。除了 - 当输出到 Normal+Specular 目标时,我想屏蔽使用颜色纹理的 alpha 通道写入的像素以控制混合量。但是 - 我正在从着色器中输出一个 vector4 作为我的第二种颜色,它的通道都用完了。

那么有什么方法可以让 Direct3D 临时使用 alpha 值作为混合参数,用它来“屏蔽”我的 4 个规范 + 规范通道,然后在使用后丢弃它?还是让渲染目标 2 使用渲染目标 1 的 alpha 作为其混合参数?

我知道我可以只使用 2 个分量来表示法线向量 - 例如,存储 X 和 Y 然后动态重新计算 Z - 但是如果我可以不改变它们,这个过程会更简单并且可能会表现得更好 - 所以希望找到一个那样解决。

谢谢!