问题标签 [direct3d9]
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.
directx - HLSL - 如何设置采样器 Min/Mag/Mip 过滤器以禁用所有过滤/抗锯齿?
我有一个 tex2D 采样器,我只想精确返回纹理上存在的那些颜色。我正在使用 Shader Model 3,所以不能使用load。
如果纹素重叠多种颜色,我希望它选择一种并让整个纹素成为那种颜色。
我认为要做到这一点,我想禁用 mipmapping,或者至少禁用 mips 的三线性过滤。
我的问题是我不太了解 Min/Mag/Mip 过滤,所以不确定我需要设置什么组合,或者这是否是我所追求的。
将完整纹理映射到我的球体后相关区域的截图;
抗锯齿/混合/过滤伪影清晰可见;我不要这些。
MSDN有这个说法;
D3DSAMP_MAGFILTER:D3DTEXTUREFILTERTYPE类型的放大过滤器
D3DSAMP_MINFILTER:D3DTEXTUREFILTERTYPE 类型的缩小过滤器。
D3DSAMP_MIPFILTER:在缩小期间使用的 Mipmap 过滤器。请参阅D3DTEXTUREFILTERTYPE。
D3DTEXF_NONE:与 D3DSAMP_MIPFILTER 一起使用时,禁用 mipmapping。
另一个了解 hlsl 内在函数的好链接。
解决
根本不是 HLSL 问题!对不起大家。我似乎问了很多无法回答的问题。Ogre 覆盖了上述设置。这是固定的;
directx - IDirect3DVertexBuffer9::Lock 失败的可能原因是什么?
在我们游戏的一些最终用户的错误报告中,我经常看到以下行为:IDirect3DVertexBuffer9::Lock
失败,返回的错误代码是D3DERR_NOTAVAILABLE
.
一旦发生这种情况,通常(但不总是)紧随其后的是CreateTexture
orCreateVertexBuffer
调用失败并出现错误D3DERR_OUTOFVIDEOMEMORY
。
顶点缓冲区锁定失败的可能原因是什么?虚拟内存地址空间是否会耗尽,或者什么?
c++ - 在英特尔 GMA X3100 上令人难以置信的 Direct3D9 动态顶点缓冲区锁定崩溃/锁定后故障
首先,我是一位经验丰富的图形程序员,但众所周知,每个人都会犯错误。不幸的是,代码库有点太大,无法开始在这里抛出合理的代码片段,并在一个孤立的 CPP/代码库中重新创建整个情况,这是一个太高的命令——我很抱歉,没有时间。我会尽力解释。
顺便说一句,如果有人想知道我是如何处理这个或那个的,我当然会提供特定的代码片段!
与 D3DPOOL_DEFAULT 池中的所有资源一样,当设备上下文从您手中夺走时,您迟早将不得不重置您的资源。我已经建立了一个机制来处理多年来一直工作的所有相关资源;但是这个事实无论如何我当然已经检查,断言并怀疑自从这个错误曝光以来的任何假设。
发生的情况如下:我有一个相当大的动态顶点缓冲区,确切大小为 18874368 字节。该缓冲区在生成动态几何体(与等值面相关,仅供参考)之前每帧都被锁定(并使用 D3DLOCK_DISCARD 标志完全丢弃)。这工作正常,当然,直到我开始重置。可能需要 1 次、可能需要 2 次或可能需要 5 次重置来触发一个错误,该错误会导致更新资源上的 Lock() 操作返回的指针上的访问冲突或普通崩溃 - 关于有点类似的地址,但没有它在第一种情况下附加的偏移量,因为在这种情况下,我们在写一半的地方——在 D3D9 dll Lock() 调用之外。
我已经在其他硬件上对此进行了测试,将我的 GMA X3100 驱动程序(使用带有 BootCamp 的 MacBook)升级到了最新版本,但我无法在任何其他机器上重现它,而且我不知道这里出了什么问题。我试图用类似的缓冲区重现类似的情况(我有一个用四边形填充的相同类型的大型便笺簿),并且超过一定数量的字节它开始表现类似。
我不是在这里寻求解决方案,但我很感兴趣是否有其他开发人员在这里与同一个敌人作战,或者可能有人可以为我指出一些有见地的方向,也许会问一些可能会阐明的问题我可能会或可能不会忽略什么。
谢谢,任何更正都非常受欢迎。
- 尼尔斯
ps - 我的一个朋友提出了一个有效的观点,即它是板载视频 RAM 的巨大缓冲区,并且由于它的动态特性,它在内部至少有两倍或三倍的缓冲。另一方面,调试输出(D3D9 调试 DLL + 最大警告输出)保持静默。
ps 2 - 如果它在更多机器上测试并且仍然有效 - 这可能是一个环境问题:巨大的动态,内部双/三倍缓冲缓冲区,没有很多内存和驱动程序在他们应该抱怨的时候......
ps 3 - 刚刚被告知(应该知道)Lock 和 Unlock 会执行 18MB 的完整副本 - 这也不太聪明,但仍然 :) (我确实对渲染器的通用动态 VB/ 使用了更明智的策略肠易激综合症)。
除非有人有更好的建议;我还是很想听:)
direct3d - Direct3D 9 中的剪贴平面、顶点着色器和硬件顶点处理
我的应用程序中存在剪贴平面问题,我可以在 DirectX SDK(2010 年 2 月)的示例中重现该问题。
我在 HLSLwithoutEffects 示例中添加了一个剪贴平面:
当我旋转相机时,我在使用硬件和软件顶点处理时会有不同的视觉结果。在软件顶点处理模式或使用参考设备时,剪裁平面按预期工作。在硬件模式下,它似乎随着相机旋转。
如果我删除对 RenderText(); 的调用 从 OnFrameRender 然后硬件渲染也可以正常工作。进一步调试表明问题出在 ID3DXFont::DrawText 中。
我在 Windows Vista 和 Windows 7 中遇到了这个问题,但在 Windows XP 中没有。我在不同 PC 上的所有三个操作系统中使用最新的 NVidia 和 ATI 驱动程序测试了代码。是 DirectX 的问题吗?或者剪贴平面的使用不正确?
谢谢
伊戈尔
c++ - DirectX 深度缓冲不起作用
出于某种奇怪的原因,我的深度缓冲区不起作用,即后来绘制的三角形总是重叠,无论它们的位置如何。
我有这些演示者参数
这些渲染状态:
编辑:感谢您的回复。这是渲染代码代码:
Model::Draw()
代码是这样的:
wherevertexBuffer
和indexBuffer
with 是类的属性。
以下是一些屏幕截图(FU,垃圾邮件保护):
1)http://img822.imageshack.us/img822/1705/dx2010080913182262.jpg
这是情况
2)http://img691.imageshack.us/img691/7358/dx2010080913183790.jpg
这是立方体在前面时的(正确)视图(立方体稍后绘制)
3)http://img340.imageshack.us/img340/4720/dx2010080913184509.jpg
但是当我前面有截断的金字塔时,立方体仍然重叠
当你自己移动相机时更容易看到......
direct3d9 - Direct3D9 是否支持四元组?
我阅读了Direct3D9 帮助(强调我的):
Direct3D 9 支持点、线、三角形和网格图元。这些已被扩展以支持线性以外的高阶插值。虽然三角形和线条具有空间范围,但到目前为止,它们都是使用线性插值渲染的。在 Direct3D 9 中,Direct3D 支持使用更高阶(最多五次)插值来呈现这些基元类型。此外,现在支持新的四元组基本类型。这种新类型也可以使用高阶插值进行渲染。
这让我相信 Direct3D9 支持四边形,但我在 Direct3D9 包含文件中找不到任何类似的东西D3DPT_QUADLIST
,所以是帮助错误,还是我在这里遗漏了一些明显的东西?
c++ - 在 D3D 设备上绘制精灵
我有一个用于绘制文本和精灵的 C++ 代码中的挂钩 DirectX。我对其进行了测试,它很好地绘制到了 2D 应用程序上。但是,当我尝试使用 3D 应用程序(实际上是一些复杂的游戏)时,只能看到文本。由此我推断精灵没有被其他东西透支,因此文本也是如此。我设置标志
由于某种原因,ALPHABLEND
导致精灵在任何应用程序中根本不可见,所以我没有启用它并且它被注释掉了。
是否存在任何在 D3D 上绘制精灵的防故障方法?否则,我应该为它们使用不同的标志/值吗?
另外,我应该为精灵设置哪个 z-index,以防它真的“在”一些其他精灵/对象“之下”?
(我不是任何吸引到设备的作者,我只有挂钩的 DirectX API,甚至不知道我绘制的应用程序代码)。
graphics - 释放被强制终止的应用程序留下的 Direct3D 资源
我正在开发 Direct3D 应用程序,有时我需要通过调试器强制终止应用程序。以这种方式终止应用程序几次后,Direct3D 在尝试创建新设备时报告“视频内存不足”错误。目前,我正在通过将显示分辨率切换到 800x600 并恢复到以前的分辨率来解决这个问题,以期“重置”视频内存。它在 99% 的时间内都有效。但是如果有一个简单的实用程序——也许是一个命令行应用程序——来通过显式释放视频内存来快速重置我的显卡和 Direct3D 堆栈,那就太好了。
如何释放被强制终止的 Direct3D 应用程序留下的视频内存和其他资源?
directx - 如何在 D3D 窗口应用程序中启用 VSYNC?
所以,我在窗口应用程序中使用 D3D。
我使用以下参数启动了 D3D:
每次调用 OnPaint 时,我都会将图像渲染到后缓冲区并将其呈现到前面。
据我所知(MSDN 也是这么说的),一旦我设置了D3DPRESENT_INTERVAL_ONE
,vsync 就可以工作了。
但在这种情况下,水平拖动时图像会撕裂。
(似乎图像上有一条线,线下方的图像显示在监视器上,然后是上面的部分。)
一些网站说 D3DPRESENT_INTERVAL_ONE 在窗口应用程序中不起作用。
无论如何,我怎样才能启用垂直同步?
ps 我终于发现 D3D vsync 是启用的,而有些窗口设置不正确,可能是窗口本身没有同步。不过,我还没有查看设置。
directx - 有人知道一些固定的管道着色器教程或示例吗?
我正在使用 3d gamestudio a8 免费版制作游戏。免费版不支持着色器,它只支持固定管道着色器。3d gamestudio 的 wiki 中有一些示例(单击此处),但我想知道还有更多示例或教程。