问题标签 [slimdx]
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.
c# - 为什么有效的纹理无法到达着色器?(Direct3D9)
大家好,我目前正在尝试使用 c# 和 SlimDX 为我的图形引擎创建延迟渲染器。作为资源,我使用本教程非常有用,尽管它是为 XNA 设计的。但是现在我被困住了……我将渲染器设置为绘制所有几何图形的颜色、法线和深度,以分离渲染目标纹理。这行得通。我可以将生成的纹理作为精灵绘制到恢复的后台缓冲区,并且我可以看到它们包含了它们应该包含的内容。但是当我尝试将这些纹理传递给另一个着色器时,在这种情况下创建光照贴图时,会发生奇怪的事情。这是我绘制一帧的方法:
现在,当我用一些代码替换对 DrawDirectionalLight 的调用以将 _colorTexture、_normalTexture 和 _depthTexture 绘制到屏幕上时,一切看起来都很好,但是当我使用 DrawDirectionalLight 函数时,我看到了疯狂的闪烁。从 PIX 的输出看来,我的纹理没有正确传递给着色器:
按照教程,纹理参数和采样器定义如下:
现在我最大的问题是为什么?没有打印错误消息来调试输出。
编辑:
渲染目标/纹理是这样创建的:
编辑2:
问题似乎在于 directionalLightShader 本身,因为传递其他常规纹理也不起作用。
geometry - 在 PIX 中看起来扭曲的屏幕空间正方形
我有一个简单的函数,可以创建一个覆盖整个屏幕的正方形,我用它来应用后期处理效果,但据我所知,它是导致无数错误的原因。
当我在 PIX 中运行我的代码时,我得到以下网格,但正方形应该是直的并覆盖屏幕,不是吗?
我的顶点着色器不进行任何转换,只是将位置信息传递给像素着色器。
创建正方形的函数如下:
当我渲染正方形时:
编辑:我添加了正在运行的顶点着色器
这是 PIX 的顶点输出。
上一篇:
帖子VS:
这是我选择调试顶点 0 时生成的反汇编 PIX
我还添加了输入汇编器:
c# - C# 使用 SlimDX 捕获全屏游戏
我最近做了一个游戏截图的应用程序。
首先,我使用 GDI 来捕获游戏,但为此我不得不在 win7/vis 下禁用 aero,而且我在 windows XP 上遇到了一些问题。
然后我决定使用 DirectX,在意识到微软的 DX 不适合我之后,我发现了这个 SlimDX 屏幕截图的好例子 (http://spazzarama.wordpress.com/2009/02/07/screencapture- with-direct3d/)
SlimDX 工作得很好!它甚至让我无需在 win7/vis 上禁用 aero 即可捕获游戏。
唯一的问题是 - 当我将游戏切换到全屏时,我得到“D3DERR_DEVICELOST:设备丢失(-2005530520)”。
谁能建议一种自定义代码的方法,以便捕获全屏应用程序?
注意:我已经有一种方法可以确定游戏是全屏还是窗口。
我改变了这一行:
对此:
gdi - 如何将 SlimDX 场景直接渲染到 GDI 位图
有没有办法在 SlimDX 中将渲染目标设置为 GDI 位图,以便在渲染场景后我可以立即将渲染从那里 BitBlt 以便在另一个线程中处理并继续渲染?
是否需要渲染到纹理然后将内容复制到位图?我希望能够做到这一点而无需任何不必要的复制。我将需要我能得到的每一个加速。
c# - NV_STEREO_IMAGE_SIGNATURE 和 DirectX 10/11 (nVidia 3D Vision)
我正在尝试使用 SlimDX 和 DirectX10 或 11 来控制 nVidia 3D Vision Kit 上的立体化过程。多亏了这个问题,我才能让它在 DirectX 9 中运行。但是,由于缺少一些方法,我无法让它在 DirectX 10 或 11 下运行。
算法是这样的:
- 渲染左眼图像
- 渲染右眼图像
- 创建一个能够同时包含它们的纹理加上一个额外的行(因此纹理大小将是 2 * 宽度,高度 + 1)
- 写下这个 NV_STEREO_IMAGE_SIGNATURE 值
- 在屏幕上渲染此纹理
我的测试代码跳过了前两个步骤,因为我已经有了立体纹理。它是以前的 .JPS 文件,特别是包含在 nvidia 3D 套件随附的示例图片中的文件之一。第 5 步使用全屏四边形和着色器通过正交投影矩阵将立体化纹理渲染到其上。我为 DX9 看到的示例代码不需要这个,只需调用 StretchRect(...) 方法将纹理复制回后台缓冲区。所以也许是因为这个原因不起作用?在 DX10 中是否有类似的方法来完成此操作?我认为渲染到后台缓冲区理论上与在其上复制(或 StretchRecting)纹理相同,但也许不是?
下面是我的代码(slimdx): 立体化过程
NV_STEREO_IMAGE_SIGNATURE 数据
主要的
提前致谢!
c# - SlimDX - 终止线程
我创建了新窗口,并在新线程上使用了 SlimDX.Windows.MessagePump.Run。我怎样才能停止那个循环?
c# - SlimDX - 设置状态块
我想在 SlimDX Direct3d9 设备中设置状态。
我在 frameRender 函数开始时就有那个代码。
但我在调试窗口中收到此错误:
我得到了数百万行。他们都说同样的话。我应该如何处理这些状态?如何以正确的方式制作它?
c# - 尝试将带有 Vector4 数组的结构传递给 cbuffer
我正在玩一些 SlimDX(使用 DX10/11),到目前为止我得到了一些不错的结果,但我坚持将一组 Vector4s 传递给着色器。
如果我尝试以下结构:
并尝试将其存储在以下 cbuffer 中:
我没有收到任何错误,但矩阵中的值已损坏。
但是,当我在 c# 中声明我的结构时,如下所示:
然后一切正常。
我真的不想在结构中创建 64 个字段并像那样填充它们(我可以通过反射但仍然如此)。如何使用数组将 Vector4 传递给我的常量缓冲区?
如果无论如何这是一个愚蠢的想法,应该以其他方式完成,请告诉我。这是我第一次编写与directx 和着色器相关的东西。
要完整:
在 C# 中声明缓冲区
我如何更新缓冲区:
提前致谢
c# - SlimDX Line.GLLines 有什么作用?
slimdx 中的 calss 行的这个属性是什么?
GLLines = 真/假
这是我正在谈论的课程: http: //slimdx.org/docs/#T_SlimDX_Direct3D9_Line
c# - 使用 SlimDX 时剪裁和 3D 投影不正确
我正在做一个简单的项目,我希望使用 SlimDX 在 WinForms 应用程序中显示 3D 对象。我创建了一个小项目来执行此操作,但我遇到了一个问题,我渲染的对象被裁剪在 0.0f 和 -1.0f 之间。
我查看了一个朋友的类似项目的代码(他们没有这个问题)并且无法弄清楚它为什么会发生。我不得不将对象的大小限制在 -0.1f -> 0.1f 的范围内,以便我能够看到它。扩展我的远平面没有任何作用。我朋友正在使用的项目可以加载超过我大小 500 倍的对象,并且没有剪裁问题。
有没有人有什么建议?(请参阅下面的屏幕截图和代码)
表格代码
顶点着色器代码
像素着色器代码