Questions tagged «directx»

DirectX是Microsoft提供的一组多媒体API,主要针对游戏开发人员。DirectX集合中的流行API包括Direct3D,XInput和XAudio。

1
如何创建对玩家和敌人有反应的粒子?
我目前正在使用自己的游戏引擎制作游戏,该引擎是用C ++编写的,并且使用的是最新的Directx SDK。 该游戏是一款自上而下的太空射击游戏(具有非常有趣的变化),我希望玩家能够飞过这种星云。我真的想尝试并钉牢好几百种微粒,使其在飞入它们的过程中从玩家飞船中移出时产生良好的触感。有点像粒子如何在XBLA上的《 Geomtry Wars》中移出播放器。 在C ++方面,我是一位经验丰富的程序员。但是,我不知道如何开始实现这种效果。有没有人想提出任何很棒的想法或设计选择?随意回答您喜欢的任何深度。
38 c++  directx  particles 

9
我应该继续学习OpenGL还是只是改用DirectX,让我有更好的机会进入游戏行业?[关闭]
我已经使用OpenGL和Linux学习图形编程已有一段时间了。我对大多数概念都很熟悉,但是我真的很想加深我的知识,并最终从事游戏开发,尤其是游戏引擎开发的职业。 到目前为止,在我看来,大多数游戏工作室都使用DirectX为Windows制作游戏。 编辑:我知道之前曾有人问过OpenGL vs DirectX问题,但我没有从我想要的角度找到答案。 编辑2:阅读完所有响应/评论后,我决定继续深入研究OpenGL / GLSL的图形,但是我也会尝试使用DX,只是对API有基本的了解。我要感谢大家为您提供的答案和见解。

4
游戏故事事件编程
我用c / c ++和DirectX开发了一个游戏引擎。 我有一个用于地图的图块引擎,动画播放器/ npc精灵,与npc对话,菜单和级别更改,但没有游戏,只是感觉很空。 我环顾四周,不断听到流行语的答案,但我想知道如何在游戏中实现一个故事。 有人说过一个保存文件,其中包含用于控制游戏中所有可能的动作/状态的标志,但这听起来很荒谬。 这有点雄心勃勃,但我的目标是让游戏像老式的Pokemon / Final Fantasy游戏一样。 有谁知道这些游戏的运作方式或所使用的理论吗? 我已经寻找了一段时间,非常感谢人们的投入。
28 c++  directx 

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

3
对于体素渲染,更有效的方法是:预制的VBO或几何着色器?
给定一个相当静态的体素数组,效率更高:使用CPU预先生成VBO来渲染体素面(暂时忽略更高级的渲染形式,如行进立方体),或在GPU上使用几何体着色器生成脸上苍蝇? 我不是担心更新变化的体素,但是这当然是GPU版本的好处,因为您不必重建VBO。另外,GS方法感觉更现代了:) 另一方面,我还没有研究过GS如何真正与现代GPU中的栅格化管道一起工作的细节。它是将顶点输出到某种流缓存中,还是将顶点写入两者之间的普通GPU内存中?如果是后者,那么即时生成可能会减少我猜想的其余GPU任务的可用带宽和处理能力,然后在CPU上进行将更为有益。

7
如何在没有访问开发套件的情况下获得PS3 / Xbox 360体验?
我是一个崭露头角的游戏程序员,试图进入PS3,Xbox 360的行业编程。我看到的主要问题是需要向潜在的雇主证明我的技能,但是却无法获得PS3或Xbox 360的开发套件,这直接是不可能的。 我的问题是,向控制台开发人员展示我的技能的最佳替代方法是什么? Windows DirectX中的C ++编程似乎接近于展示Xbox 360编程技能,而OpenGL中的C ++编程则相对接近于展示PS3编程技能。不幸的是,从网络研究看来,Xbox 360和PS3实际上都拥有自己的专有库,因此,这似乎并不是100%富有成果的努力。这种方法似乎最接近,但也最耗时。另外,您实际上并没有使任何内容在控制台上运行。 另一方面,使用XNA编程的好处是您的游戏实际上是在控制台上,尽管我的印象是这不是“真正的交易”,因为它只是DirectX的包装,并且使用C#代替C ++。 有没有人具有行业内的知识或经验,从而知道哪种游戏演示对向潜在雇主展示最有用?DirectX,OpenGL,XNA,虚幻引擎,Unity3d,Flash等中的C ++?一天只有几个小时,我很想知道如何指导我的努力。 我的直觉是,DirectX是最好的选择,因为它似乎更接近Xbox 360上使用的东西,但是如果以另一种语言/引擎进行出色的演示同样好,那么显然花费的时间会更少另一条路线。 预先感谢您的帮助和建议!

3
我通常应该在游戏的一帧中使用几个活动着色器?5个或更多,例如100个?
在现代游戏中,通常同​​时在一个场景中同时激活多少个着色器?我知道正在使用多个着色器,游戏在每一帧中在它们之间切换,通常通过着色器绘制对象: 使用着色器一绘制所有对象 从着色器一更改为着色器二 使用着色器2绘制所有对象 不过,我知道这并不是那么简单,尤其是对于整个场景的光晕效果,渲染到纹理等效果,但是我想我们可以假设它在大多数时间都可以正常工作,对吗?“按着色器分组”方法很好,因为切换着色器是一项昂贵的操作。 一方面,您不能有太多的着色器,因为您想快速渲染场景。另一方面,您需要用于皮肤,金属,水等的许多不同的着色器(或带有分支的超级着色器-非常相似)。 理论上的,现代的,第三人称3D PC侦探游戏(如果需要的话,是DirectX 11)将使用多少个(以及哪个)不同的着色器?在某个“帧X”处,将是5个,20个或更多(例如100个活动着色器),仅计算活动着色器吗?我知道这不是一个数字,但我想知道在考虑PC游戏时,什么规模和因素很重要。 在我的示例游戏中,我将每帧使用大约9-11(将其视为不同的小型着色器或一个超级着色器-现在不重要): 皮肤着色器 眼影器(不是太多吗?但它们是不同的) 金属着色器 地面着色器 雪/雨着色器(如果需要) 着色器(如果场景中存在水) 发光着色器(仅当涉及某些特殊效果时) 发光器着色器(路灯等) 标准着色器(对于所有其他着色器,仅是标准着色) 具有法线贴图的标准着色器 2D着色器(用于GUI等) 是“很多”还是“不是很多”?我是否忘记了一些我需要的重要着色器?

7
现代着色书?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 我对了解着色器感兴趣:它们是什么,何时/何地使用它们,以及如何使用它们。(特别是我对水和光晕效果感兴趣,但是我对着色器的了解接近于0,因此我需要进行一般性介绍)。 我看到了很多已经有两年历史的书籍,所以我不知道它们是否仍然适用。目前,我的目标是XNA 4.0(我认为这意味着适用于Shader Model 4.0的HLSL Shaders),但是我认为通常针对DirectX 11和OpenGL 4的任何东西都是有帮助的。

7
对于2D游戏,是否有任何理由不使用Direct3D或OpenGL等3D API?
我已经很长时间没有从事游戏开发了。当我这样做时,大多数人都使用Direct Draw来创建2D游戏。在我停下脚步的时候,人们说采用正交投影的OpenGL或Direct3D只是要走的路。 我正在考虑重新创建2D游戏,尤其是在手机上,但也可能在XNA平台上。要使用OpenGL制作东西,我需要(充分)小的学习曲线来使自己适应3D开发。 是否有任何理由跳过它,而是使用2D框架工作,而我只有一个宽度x高度帧缓冲区,我需要用像素填充?
20 2d  opengl  directx 

12
图形API之前的3D理论?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 我是一名软件工程师,我希望将自己的职业转向游戏开发。我正在使用C ++ / DirectX在2D上读书。当我进入3D时,我知道我想正确地做。例如,我对3d空间一无所知。因此,如果我仅学习API,我可能会知道,但是我不知道是否可以使用它开发交互式的mini 3d世界。我不会拥有一个带有最新着色器等的旋转板条箱来称自己为成功。我的数学技能取决于三角/线性代数,并且还在上大学。我知道还会有更多的数学运算。在选择OpenGL / Direct3D之前,我应该先阅读3D理论书籍还是其他建议?我只知道API不会教授3D游戏开发,也不希望之后迷路。我非常注重书籍,因此也可以提供建议。欢迎思想。谢谢!
19 graphics  c++  opengl  directx 

3
为什么像素着色器不让我们直接从帧缓冲区或深度缓冲区读取?
让我在像素着色器中采样帧缓冲区或深度缓冲区将是一个非常有用的功能。即使只是能够知道当前像素背后的深度或颜色,也会很有用。 为什么OpenGL和DirectX都不允许我这样做?我原本希望存在某种硬件限制,但是Alpha混合使用帧缓冲区中的颜色进行混合计算,而Z测试会在当前位置采样深度缓冲区。为什么不直接将这些价值观展示给我们呢?我希望以后能看到吗?
18 opengl  3d  directx  shaders 

2
编码一个非常高分辨率的显示阵列
我的任务是构建一个实时的“全屏”演示,以在5x2的60+英寸LED电视阵列上运行;或者换句话说,在20兆像素的显示器上运行。 我们有一台可以运行单个Win7桌面的机器,可以在整个显示器上以全分辨率运行,还提供一些相当不错的视频卡。 我的问题是:除了我的像素着色器将要进行的大量工作之外,DX10。*是否还有其他限制会在这里发挥作用,而不会在更大的视口中起作用?直到下周,我才可以使用该硬件,但是到那时我想写点东西,可以用来对系统进行基准测试。 更新资料 虽然我设法在一堆机器上使用一堆AMD EyeFinity(6输出)卡来工作-为了使事情顺利进行,但最简单的方法竟然是在每个显示器上都创建一个DX窗口,因为它具有一个窗口范围显示导致了一些性能问题-通过在一组计算机上分配任务,我也使它运行得很好,每台计算机都驱动两个显示器。 这非常容易。对于我的测试XNA应用程序,我添加了一个GameComponent来捕获一些游戏状态(相机位置/方向等),并以帧为单位在本地子网中对其进行UDP垃圾邮件。 该组件具有一个Mode开关(发送或接收)。如果处于Receive模式下,它将捕获UDP数据报,并使用来自发送方的信息更新游戏状态。Send模式仅发送状态数据包,并通过服务/守护程序使节点启动或停止客户端应用程序。任何客户端都可以充当“主”,并且将客户端切换为Send模式会要求所有其他节点切换为Receive。有趣的是,人们在争夺控制权时会发生什么。 另一个好处是:我创建了一个控制台应用程序,该应用程序处理一系列关键帧状态定义(位置,时间等),并根据需要进行插值,并使用与游戏引擎相同的代码发送它们。这使我可以轻松地编写脚本动作,从Web浏览器提交转换等。 总而言之,花了大约50行代码来保持应用程序的多个副本同步运行。一些额外的复杂性来自为每台机器偏移相机的位置并纠正一些透视/投影烦恼,但是大部分归结为每个节点的配置文件。

2
如何处理D3DX .dll地狱?
每个SDK更新中都有大量的D3DX dll版本,每个版本都有唯一的名称(D3DX dll名称列表)。 人们经常缺少版本。因此,即使他们具有DirectX的兼容版本,基于D3D的项目也不会在其计算机上运行。 我希望能够将游戏(很少的业余时间项目,游戏卡纸条目等)作为简单的zip文件分发,而无需安装程序。但是很大一部分用户遇到了丢失的D3DX .dll错误。而且,如果没有安装程序,Microsoft的官方解决方案(DirectX Web安装程序/更新程序)实际上并不是解决方案。 不幸的是,Microsoft仍然不会给我们提供静态链接到D3DX的选项(这将是一个很好的简洁解决方案)。而且避免使用D3DX并不是很实用,特别是如果您正在使用着色器(不,至少在目前,我没有切换到OpenGL)。 有没有人有聪明的解决方案来避免此DLL地狱?
16 directx 


1
流动的GPU计算水
我具有土木工程背景,并定期进行水力学和水文分析。他们为这类事情出售学位,但这实际上不是火箭科学。我最近想到了在GPU上为地形实现整个水文和水力过程。我是最近才学习计算着色器的,所以我目前在设计方面比设计并行GPU工作流程要好得多。 您可以使用以下公式计算降雨事件期间产生的水量: Q (CF/S) = c * I (in/hr) * A (acres) 我很难超越计算甚至第一个区域的“面积”。 当前实施概述: 地形是1单位间隔的规则顶点网格 高度图为每个顶点包含一个R32高度值 目前,我只允许沿4个基本方向流动(无对角线) 我正在使用Texture2D [int]作为已经分析过的顶点的模具 当前算法: 当地形工具处于活动状态且现在不处于活动状态时... 清除“模具”。 扫描整个地形以获取最低海拔。 那一点是CS_Flood的初始输入。 CS_Flood使X轴通过。 每个输入顶点都在X-和X +方向上投影最多2048次。 找到具有OOB坐标的相邻顶点将指示该方向上的地形边缘。CurrentPoint附加到BoundaryPoints缓冲区,并且该方向的投影循环终止。这很容易,并且每次都很好用。 高度大于或等于当前顶点高度的相邻顶点将在模具中标记,并添加到NextPass缓冲区中。 高度小于当前顶点高度的相邻顶点表示山脊的顶点,并终止投影环。将来的洪水填充迭代可能会在山脊的底部,“后”侧向上流动,并再次检测到同一山脊。 为此,任何被多次检测到的峰/谷点都不会成为边界点。 仅将一次检测到的任何峰/岭点附加到BoundaryPoints,并终止该方向上的投影循环。 CS_Flood使用X轴通过生成的点作为输入,以相同的代码进行Z轴通过。 现在,CS_Flood继续在两个方向上无限期地交替。最终,每当CS_Flood完成并且NextPass缓冲区为空时,我将终止整个循环。 理想情况下,在那一点上,边界点将包含在自然排水沟上出现的每个顶点。降落在边界内的水滴最终流到相同的低点。水滴降落到边界上,导致“其他地方”。 然后: 在不清除模具的情况下,重新扫描地形以查找最低的非模具顶点。 迭代CS_Flood。 重复直到模具装满(或类似的东西)。 这些颜色很难感知3D。这显示了在整体高程处的轮廓线:( 一个孔,在边缘附近被一个护堤包围) 大约有10种独特的方法可以使顶点流失。为每个颜色赋予独特的颜色,如下所示:( 可见的圆形工具标记,“山脊”很好地显示) 这将CS_Flood生成的每个点(边界或其他)显示为POINTLIST: 该算法几乎总是 有效。有时,它甚至可以正常工作。其他时候,算法显然包含在正确的形状中,但是将继续无限期地输出点。如第三个屏幕截图所示,有时会感到困惑。我必须忽略另一种情况/因素。如果能找到我的疏忽或提出更简单和/或更优雅的方法来解决问题的建议,我将不胜感激。 MissingPoint!可以通过将算法检测到的每个新的BoundaryPoint添加到NextPass缓冲区中来提供帮助。在下一次传递期间,该创可贴所生成的99%的点将浪费少量的GPU时间,以确定它们无法走到无处可去。在第一遍中,发送LowestPoint以及其他NextPass点也将处理此特定情况。 我知道这是合理的,并且如果有足够的时间,我将能够为它做足够的创可贴以完成我想要的事情。如果可能的话,我想以一种更好,更聪明,更快的方式进行操作,但是我没有足够的经验来更好地了解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.