问题标签 [direct3d]

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 投票
5 回答
4284 浏览

opengl - 在direct3d和opengl之间共享纹理?

我知道不建议混合使用 OpenGL 和 DirectX,但我正在尝试在使用单独图形 API 的两个不同应用程序之间架起一座桥梁:我希望有一种共享数据的技术,特别是纹理。

我有一个在 Direct3D 中创建的纹理,如下所示:

有什么方法可以在不通过系统内存往返的情况下使用 OpenGL 中的这个纹理?

0 投票
4 回答
7123 浏览

c++ - Direct3D 使用“乘法”混合模式和 Alpha 渲染 2D 图像

我正在尝试使用 Direct3D 复制 Photoshop 过滤器。我一直在阅读和谷歌搜索不同的渲染状态,我的效果几乎可以工作。问题是它忽略了纹理的 alpha 值。

这是解释这种情况的图像:

http://www.kloonigames.com/petri/stackoverflow_doesnt_allow_.jpg

我找到了一种解决方案,即保存没有透明度和白色背景的图像。但我对这个解决方案并不满意。问题是我真的需要使用 alpha 值。我想逐渐淡出图像。如果混合模式忽略 alpha 值,我将无法执行此操作。

所以问题是如何用 alpha 渲染图像?

这是混合模式代码:

编辑添加了 SetTextureStageState

0 投票
1 回答
870 浏览

math - 在世界 xz 平面上的屏幕空间中投影一个网格

我想在 xz 平面上投影一个网格,如下所示:

我是

为此,我创建了一个 x 和 z 范围为 [-1|1] 的顶点网格。在着色器中,我将顶点的 xz 屏幕坐标与 View-Projection 矩阵的倒数相乘。然后我想根据新的世界 xz 坐标调整高度,最后我通过将这些坐标与 View-Projection 矩阵相乘将它们转换回屏幕空间。

我不知道为什么,但屏幕上显示了一架非常奇怪的飞机。我使用的数学运算是否正确?

0 投票
1 回答
295 浏览

3d - 在 3D 应用程序中绘制目标圆

我正在开发一个 3d 游戏,只是为了学习。

我有一个由高度图生成的 3d 世界,以及覆盖在该世界上的各种基于网格的对象。

我希望玩家能够瞄准我可以做的世界中的物体,但我想在目标物体所在的地形或物体上绘制一个瞄准圈。如果你玩过魔兽世界,你就会明白我的意思,当你瞄准某人时,它会在他们下方的地板上画一个红色圆圈。

但它会投射到他们站立的任何地方。这可能是地形 - 因此可能需要投影到具有不同坡度的不同网格多边形上,一个是圆的一部分,另一个是圆的一部分。或者可能需要投影到一个项目上。或者可能是一个部分和另一个部分。

任何想法如何有效地做到这一点?作弊和近似值也是受欢迎的,像往常一样在游戏中我正在寻找看起来有效而不是 100% 正确的东西。

如果这对任何解决方案都很重要,请使用 directx9 和着色器模型 2。

0 投票
1 回答
584 浏览

c++ - Aero 翻转/缩略图中没有显示全屏 direct3d 9 应用程序的缩略图

我确定这是在网络上的某个地方,但是我在搜索词方面遇到了问题(得到了很多不相关的东西。)无论如何,我有一个 Direct3D9 应用程序。当它在 Vista 和 Windows 7 上全屏运行时,您点击 Alt-Tab 或 Win-Tab,我的应用程序在缩略图/预览/实时视图中显示为空白(不确定正确的术语。) API 或通知我可以响应我可以在哪里将我的后台缓冲区绘制到缩略图?

0 投票
1 回答
1600 浏览

c++ - 无法在 D3D9 中使用 SetTransform

什么可能会阻止 IDirect3DDevice9::SetTransform 工作?我查看了很多在 Direct3D9 中使用转换矩阵的教程,包括这里的这个。据我所知,他们都以同样的方式做事。

我正在尝试编写一些代码来翻译纹理多边形。我用一个用 D3DXMatrixTranslation 初始化的矩阵调用 SetTransform,它返回 S_OK。但是,绘制到屏幕上的实际多边形不会被转换。

0 投票
1 回答
718 浏览

.net - D3D 性能比较,着色器与内置着色器

我有一个内置在 D3D 中的正在运行的 3D 引擎(通过 SlimDX)。为了避免打断渲染管道,我将许多具有相同材质的对象组合成更大的网格(以减少状态切换)。这运作良好,并为我的需要提供了良好的性能水平。

我遇到的问题是,在运行期间,我需要更改那些较大批量网格的某些子集的材质属性。我为此使用了属性缓冲区,并且它运行得相当好。我之前一直在使用有限数量的活动属性(每个网格大约 5 个),但现在发现需要对材料有更多的变化(不同的不透明度/颜色混合),因此最终可能有数百个或更多的组合。而且由于这些更改发生在运行时,我无法在渲染开始之前将它们捆绑在一起。当然我可以重新构建网格,但我宁愿不这样做,因为它很慢,并且需要以交互速度在材质之间切换回来和第四次。

所以我的问题是,最好的路线是什么?

  • 我是否应该实现一个更强大的属性处理系统,根据需要使用可用的属性 ID 动态屏蔽面部,然后在完成后重置它们?我听说属性缓冲区中的碎片会产生额外的性能影响,我也不确定后续 DrawSubset() 调用之间的材料切换(即何时太多以及何时应该优化我的属性数组?)。有这方面经验的人吗?

  • 我的另一个想法是使用参数化像素着色器。我不需要任何花哨的效果,只需要最低限度(当前是内置的平面着色器,仅具有颜色和某些对象的透明度),因此着色器模型 1 足以满足我的需求。这里的想法是使用一个通用着色器,而不是在调用之间切换材质,只需更改一些着色器参数。但我不知道这是否比切换材质更快和/或可编程着色器是否比内置着色器慢(给出相同的结果)。

我也很好奇切换网格或在一个大网格中绘制不同子集之间的性能差异(两种情况下的材质切换数量相同)。

我知道这些问题在 GFX 卡及其各自的性能/年龄之间可能会有所不同,但我只是在这里寻找一般指导方针,了解最关注什么(即哪种类型的状态开关/CPU 干扰最大) GPU命中)。内存也是一个问题,因此任何复制整个(或大部分)网格的实现对我来说都是不可能的。

我的重点是较旧(5 年)/功能较差/集成 GFX 卡的性能,而不一定是顶级游戏玩家卡或工作站卡(如 Quadro)。我猜这可能会根据特定板上着色器性能的好坏来使用着色器来制造或破坏解决方案。

非常感谢任何和所有建议和反馈。

提前谢谢了!

0 投票
6 回答
994 浏览

java - 用于空间模拟器的 OpenGL

和几个朋友一起,我们开始了这个业余的、独立于平台的、基于 java 的太空战斗模拟器游戏项目(有点像翼指挥官的长死传奇)。虽然我们都不是 3D 程序员,所以这条路会很长。

我的问题是:在我们这里,你会开始学习 OpenGL(也许通过 GLUT)还是今天有更好的可能性?Direct3D 呢?有什么书可以推荐吗?我们点了一对,特别是

  • Dave Shriner 的 OpenGL 编程指南
  • Luke Benstead 的 OpenGL 游戏编程入门
0 投票
2 回答
1213 浏览

directx - DirectX 中的 Stretch blit 导致锯齿状边缘

我有一个 Direct3D 应用程序,它以固定分辨率(比如 800x600)运行窗口或全屏。为了支持宽屏模式,我以 800x600 渲染到后缓冲区,然后使用 Blt 将最后一帧绘制到前缓冲区的一部分中,该部分通常更大(比如 1280x720),因此 800x600 图像被拉伸到 960x720 以保持纵横比。

这工作正常,除了在某些视频卡/操作系统/驱动程序组合(nVidia Quadro、DX11、Windows 7)中,blit 似乎是使用点采样完成的,导致锯齿状边缘和通常不平滑的最终图像。

有没有办法避免这种情况?例如,在放大时强制 Blt 使用线性滤波器?

(注意:我知道我可以将原始的 800x600 资源渲染为 960x720 而不是在最后进行拉伸,但这还有其他缺点,因此在最后进行拉伸是首选解决方案)

0 投票
4 回答
1235 浏览

opengl - 从 Direct3d 到 OpenGL

我目前用 java 重写了一个旧的 Visual Basic 应用程序,大部分工作涉及用 jogl 替换 Direct3d。
由于我没有处理 Direct3d 的经验,并且只有很少的使用 Opengl 的经验,因此我一直在寻找合适的 api 调用替代品。

有没有好的指南/教程或参考资料?

编辑:
附加信息:

  • Direct3D 版本 8