问题标签 [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 投票
0 回答
208 浏览

c# - 将一条线渲染成 1x1 RenderTarget2D 不会改变目标的像素颜色

我要实现的目标如下:我的通行证将返回一个巨大的数组,其中有几个重复的唯一数字,我需要在 CPU 上检索和处理。

我尝试渲染成 2000x1 纹理,然后使用 RenderTarget2d.GetData<>() 和 foreach 循环在 CPU 上对其进行采样。它非常慢:)。所以我回避了我的问题,现在的想法是多次渲染到 1x1 纹理。在传递之间,我将在我的着色器中扩展一个参数数组以包含已经返回的数字。如果每个像素包含一个已经出现的数字,则将查询该数组并剪辑自身。

现在的问题是,无论我渲染什么,像素颜色都不会改变——它总是返回一些随机数。当我Game.GraphicsDevice.Clear(Color.Transparent);在绘制调用之前添加时,它开始返回零,尽管着色器代码应该返回 0.2f(或其 0 到 255 等效值)。可能是因为我在其中渲染了太小的内容(我在屏幕上画了一条线并沿线对场景的颜色进行采样)并且它在某些时候会受到影响?

C#/XNA 代码:

着色器代码:

0 投票
2 回答
1027 浏览

c# - C# XNA 4.0 纹理在最小化时消失

我对 XNA 还很陌生,并且遇到了一些问题。每当我最小化游戏时,当我再次打开它时屏幕会变黑。这可能是什么原因以及如何解决?

这是我的图像类:

编辑:

我终于设法让它正常工作!

固定代码:

renderTarget 的内容现在在一个单独的方法中绘制,并且被调用LoadContent()一次,并且在Draw()内容丢失时在该方法中调用。

0 投票
1 回答
271 浏览

c# - 使用 RenderTarget2D 会导致模糊

如果我这样做,我会收到一个正常绘制的模型:

但是,如果我尝试使用渲染目标,即使没有应用任何效果,结果也会非常模糊:

唯一的区别是渲染目标的使用。这是一张图片,左边是普通图,右边是渲染目标图。这是定义渲染目标的方式:

我也尝试过以这种方式定义它:

我在这里做错了什么?

0 投票
1 回答
319 浏览

xna - 我应该使用多少个渲染目标?

我需要做很多旋转,而不是做额外的计算,我可以把图像画成零度,然后把它旋转到我想要的度数。

问题是,我最终可能会每秒执行 +200 次。我应该费心去那里吗?找不到 Xna 可以支持的渲染目标数量。如果有人能启发我,我会很高兴。

0 投票
2 回答
310 浏览

c# - 不同drawableComponents XNA中的多个RenderTargets

大家好,我有一个小问题。

我在两个(bigApple,smallApple)中都有这个 2 DrawableGameComponets(bigApple,smallApple),我正在绘制到 a中RenderTarget,然后RenderTarget在 backbuffer 中绘制,但这在每个DrawableGameComponent.

我想要实现的是两者都DrawableGameComponents正确地绘制在另一个之上。

像这样:
这是两个 drawableComponent 的屏幕,每个组件中都没有渲染目标。 在此处输入图像描述

但我得到的不是这个:
这是每个组件中都有 drawableComponent 和 rendertargets 的屏幕。 在此处输入图像描述

这是我正在开发的一个小游戏。我计划在一个可绘制组件和来自相机的图像中显示游戏本身,并在另一个可绘制游戏组件中显示游戏本身。但是,一旦我将另一个添加GameComponent到组件列表中,就看不到最后添加的那个。

这是每个可绘制组件的代码。

小苹果:

——还有大苹果班

DrawableComponent2D 类包含了 drawablegameComponent 的继承,并且有一些变量可以使用。

0 投票
0 回答
1899 浏览

c++ - RenderTargetView <-> 纹理

我找到了本教程,我遵循它并创建了 DirectX 类

当我运行它时,当我调用 SwapChain->Present(0,0) 时,它没有出现任何错误,尽管 renderTargetView 应该是黄色的。为什么??我找不到错误。

PS如果我用这个代码创建一个renderTargetView:

所有作品;在我的代码中,我检查所有“结果”值;

2° 这是我要渲染的精灵的代码:Init()//init 顶点缓冲区、索引缓冲区、纹理、矩阵.... 渲染函数是这样的:

它应该在 RT1 上渲染一个精灵(例如一个球)然后:

显示 RT1(例如,如果我用蓝色清除它,屏幕上有一个蓝色形状,我可以平移、缩放和旋转)但不显示球(我在 RT1 上有渲染);但是如果我在没有将 RT1 设置为 renderTargetView 的情况下渲染球,则球会正确显示

0 投票
1 回答
744 浏览

c# - 用于 RenderToTarget 的 XNA 第二个图形设备

我正在创建一个从多个精灵创建随机岛屿的 XNA 游戏。它在单独的线程中创建它们,然后使用 RenderTarget2D 将它们编译为单个纹理。

要创建我的 RenderTarget2D,我需要一个图形设备。如果我使用自动创建的图形设备,大部分情况下都可以正常工作,除了主游戏线程中的绘图调用与之冲突。在图形设备上使用 lock() 会导致闪烁,即使这样,有时也无法正确创建纹理。

如果我创建自己的图形设备,则不会发生冲突,但岛屿永远不会正确渲染,而是呈现纯黑色和白色。我不知道为什么会这样。基本上我需要一种方法来创建第二个图形设备,让我得到相同的结果,而不是黑白。有人有什么想法吗?

这是我用来尝试创建我的第二个图形设备供 TextureBuilder 使用的代码:

这是我用来将岛屿渲染为单个纹理的代码:

这是应该发生的事情,具有透明背景(如果我使用默认设备,通常会这样做) http://i110.photobucket.com/albums/n81/taumonkey/GoodIsland.png

当默认设备发生冲突并且主线程设法调用 Clear() 时会发生这种情况(即使它也被锁定) NotSoGoodIsland.png (需要 10 个声望......)

这是我使用自己的图形设备时发生的情况 http://i110.photobucket.com/albums/n81/taumonkey/BadIsland.png

提前感谢您提供的任何帮助!

0 投票
1 回答
112 浏览

xna - 使用 renderTarget 更改图像的颜色

我尝试使用渲染目标在屏幕上绘制图像。我使用了这段代码:

但是,结果图像总是黑色的!你能帮我改变这张图片的颜色吗?谢谢。

0 投票
1 回答
900 浏览

c# - 带有 alpha chanel 的 xna 4 渲染目标

我想做一件简单的事情:使用 alpha chanel 混合将 2d 纹理渲染到 2d 渲染目标。

所以我创建了我的渲染目标:

然后我创建我的纹理:

然后我清除我的渲染目标白色,并在渲染目标中绘制我的纹理两次,具有良好的比例,并对颜色和 alpha 通道进行乘法运算。

我在屏幕上绘制了这个渲染目标,背景为绿色,渲染状态为非预乘渲染状态,因此纹理中的 alpha 值被应用为透明度。

结果如预期:

  • 在渲染目标中,仅适用于属于一个纹理的像素:

    • red chanel = 纹理 red chanel (1) * 渲染目标 red chanel (1) = 1
    • 绿色和蓝色 chanel = 纹理 chanel (0) * 渲染目标 chanel = 0
    • alpha chanel = 纹理 alpha (0.5) * 渲染目标 alpha (1) = 0.5
    • 由于 alpha 透明度设置为 0.5(1/2 红色 + 1/2 绿色),因此在绿色背景上方绘制的此纹理呈现棕色
  • 在渲染目标中,用于重叠像素(因此上述计算应用了两次)

    • red chanel = 纹理 red chanel (1) * 纹理 red chanel (1) * 渲染目标 red chanel (1) = 1
    • 绿色和蓝色 chanel = 纹理 chanel (0) * 纹理 chanel (0) * 渲染目标 chanel = 0
    • alpha chanel = 纹理 alpha (0.5) * 纹理 alpha (0.5) * 渲染目标 alpha (1) = 0.25
    • 由于 alpha 值为 0.25(1/4 红色 + 3/4 绿色),这个在绿色背景上方绘制的纹理呈现出近乎绿色的颜色

现在,如果我将渲染状态更改为只应用纹理的 alpha 通道,而不是让颜色相乘:

我应该得到的是:

  • 在渲染目标中,仅适用于属于一个纹理的像素:

    • red chanel = 0 * 纹理 red chanel (1) + 1 * 渲染目标 red chanel (1) = 1
    • 绿色和蓝色 chanel = 0 * 纹理 chanel (0) + 1 * 渲染目标 chanel (1) = 1
    • alpha chanel = 纹理 alpha (0.5) * 渲染目标 alpha (1) = 0.5
    • 并且这个在绿色背景上方绘制的纹理应该是浅绿色(1/2 白色 + 1/2 绿色)
  • 在渲染目标中,用于重叠像素(因此上述计算应用了两次)

    • 红色香奈儿 = 1
    • 绿色和蓝色香奈儿 = 1
    • alpha chanel = 纹理 alpha (0.5) * 纹理 alpha (0.5) * 渲染目标 alpha (1) = 0.25
    • 并且这个在绿色背景之上绘制的纹理应该会产生更强烈的绿色(0.25 * 白色 + 0.75 * 绿色)

我得到的是纯白色的纹理......

为什么当我不混合颜色时,我的渲染目标中的 alpha 混合计算停止工作?我的目标是仅在 alpha chanel 上进行计算,而不获取纹理颜色。我怎样才能做到这一点 ?

谢谢

0 投票
1 回答
477 浏览

c# - 在 XNA 中渲染到非 null 渲染 tarhet 会禁用抗锯齿

我正在将 3d 模型渲染到 rendertarget2D,然后我使用 sprite 批处理将其绘制到屏幕上。我使用这一行在我的构造函数中启用了抗锯齿:

当我将模型直接渲染到后台缓冲区时,抗锯齿按预期工作。现在我正在渲染到 rendertarget2D,抗锯齿不再起作用,并且我得到锯齿状边缘。(我没有调整或旋转 rendertarget2D。)

请您为我解释一下这个谜团吗?

代码:

Board 属于 DrawableModel 类,它包含一个模型和方法 DrawMe(Camera camera),它只是将模型绘制到屏幕上。Camera 是一个简单的类,包含投影和视图矩阵、相机的位置和目标位置。

更新:

下面是 DrawMe 方法的作用:

更新 2:

这是我已经完成的主 XNA 文件中的其余函数(更新和卸载内容尚未触及。):