Questions tagged «graphics-programming»

与计算机屏幕上信息的视觉表示有关的编程。


9
2D图形-为什么使用Spritesheets?
我已经看到了许多有关如何从Spritesheet渲染Sprite的示例,但我还没有理解为什么它是2D游戏中处理Sprite的最常见方法。 我在一些演示应用程序中以2d精灵渲染开始,通过将任何给定的精灵类型的每个动画帧作为其自己的纹理进行处理,并将纹理集合存储在字典中。这似乎很适合我,并且非常适合我的工作流程,因为我倾向于将动画制作为gif / mng文件,然后将帧提取到各个png中。 从单张纸而不是从单独的纹理进行渲染是否具有明显的性能优势?借助能够每秒在屏幕上将数百万个多边形绘制到屏幕上的现代硬件,这对于我的仅处理几十个50x100px矩形的2d游戏来说,是否也很重要? 将纹理加载到图形内存中并在XNA中显示的实现细节似乎很抽象。我所知道的是,纹理在加载时已绑定到图形设备,然后在游戏循环中,纹理将成批渲染。因此,我不清楚我的选择是否会影响性能。 我怀疑大多数2d游戏开发人员似乎有一些很好的理由在使用它们,我只是不明白为什么。


8
为什么游戏引擎将模型转换为三角形而不是使用四边形?
我曾使用Maya进行动画和更多以电影为导向的项目,但是我也专注于对视频游戏开发的研究。无论如何,我正在和一位教授谈话,我们不知道为什么所有游戏引擎(我知道)都转换为三角形。 有人偶然知道为什么与将模型保留为四边形多边形相比,游戏引擎会转换为三角形吗?还有这样做的利弊(如果有)吗?



1
为什么阴影贴图是标准的?
尽管我是一名程序员,但我几乎没有接触过游戏开发。我这个问题已有一段时间了,现在我正在研究游戏开发,所以我认为这是个好时机。 为什么阴影贴图似乎是游戏用来制作阴影的唯一方式?直言不讳,它看起来很糟糕。即使现代游戏的阴影设置已达到最大值,也会出现锯齿状的块状Y阴影,这非常分散注意力。 11年前制作的《毁灭战士3》使用的阴影体积看上去比我见过的任何阴影贴图实现都要好得多,其中包括在发布此问题的同一周发布的AAA游戏。《毁灭战士3》的第三方修改器甚至使阴影的边缘变得柔和,使它们在视觉上更加令人印象深刻。 实现诸如阴影卷之类的东西是否存在某种技术问题或限制?阴影贴图是否易于实施,以至于开发人员甚至不需要考虑其他任何东西? 我能够找到的关于该主题的唯一信息是,构成体积的多边形可能很大,从而要求更高。影子卷可能对系统有更高的要求,但是如果是这样的话,它们在2004年如何摆脱使用它们的困扰? 这个问题并非仅针对阴影映射与阴影体积,它们只是我在完整产品中使用过的仅有的两个,而我只是无法在其他任何技术上找到很多信息。

3
如何在程序生成的地图中确定海湾和海峡?
我有一个使用Voronoi单元程序生成的地图,其中包含定义的海平面和可信的高度图。 到目前为止,我已经成功地标注了某些地理特征:土地,海洋,湖泊,河流,河口,汇合处,山脉和生物群落。生物群落包括苔原,北方森林,草原和温带森林。那里还有其他一些生物群落,但就我的目的而言,它们现在并不重要。 我想标记下海湾和海峡,但我对如何正确执行此操作感到困惑。海湾是一条凹陷的沿海水域,直接与海洋相连。 海峡是自然形成的,狭窄的水路,连接了海洋的两部分。基本上,两片土地几乎相接,两岸都是海洋。也称为“渠道”。 为了确定功能,我可以按以下类型遍历任何功能: for each (var feature:Object in geography.getFeaturesByType(Geography.LAND)) // loop through lands for each (var cell:Cell in feature.cells) // loop through cells for each (var neighbor:Cell in cell.neighbors) // loop through a cell's neighbors trace(neighbor.hasFeatureType(Geography.LAND));

2
如何使用HLSL创建广角/鱼眼镜头?
为了获得四肢广角镜的效果,需要实施哪些概念? 伪代码和涉及内容流水线各个阶段的具体说明,以及需要从源代码传递到HLSL的哪些信息,将非常有用。 另外,安装广角镜和鱼眼镜头有什么区别?

3
如何制作这种风格的2D“发光”图形?
我对在XNA中构建基于2d精灵的游戏的基础感到满意,在该游戏中,我所有的对象都是我四处移动的.png图像。 接下来,我需要学习什么才能开发2d游戏,该游戏采用类似于Super Laser Racer的艺术风格。 这种风格的其他示例包括“冻结突触”,“几何大战”等。 我将这种样式描述为“ 2D抽象发光几何”或类似的样式。 我可以看到这些类型的游戏中的许多效果都是通过粒子系统实现的,而且也许有些东西仍然只是精灵,它们可能是在图形编辑器中绘制的,看起来都是“发光的”等。 但是接下来可能是通过对DirectX进行绘画调用并实现自定义着色器等来完成的? 那正确吗?我不太确定接下来要学什么才能提出建议或要问什么问题。


8
与软件渲染相比,OpenGL,SFML和SDL有什么优势?
我开始观看Handmade Hero系列视频,其中Casey Muratori在不使用框架等的情况下创建了一个游戏引擎。昨天我到了那儿,他展示了如何在屏幕上绘制图像。据我了解,他只是分配了一些内存,该内存与他要绘制的屏幕大小一样大。然后,他创建了一个位图,然后将其传递到分配的缓冲存储器中,并使用特定于操作系统的功能将其绘制到屏幕上。 这似乎很简单。我曾经使用GameMaker,后来改为Love2D,并与Sprite Kit一起工作了一些,但我一直想知道在有时令人困惑的图层下到底发生了什么。 既然如此,为什么当您只需要分配一些缓冲区,传递位图并将其绘制到屏幕上时,为什么还要使用图形库(OpenGL,SFML,SDL等)呢? 如果要在屏幕上绘制不同的内容,只需将它们写入位图,然后将其传递到缓冲区中。我对编程很陌生,但这对我来说似乎很简单。如果我错了,请纠正我。

3
我怎么知道我是否过于紧密地抽象图形API?
制作支持多个图形API的渲染器时,通常需要在与某种图形API(例如OpenGL,Vulkan,D3D11等)绑定的某种低级库中抽象代码。 它们的工作方式彼此非常不同,因此制作一个好的通用API变得至关重要。我已经读到您通常会希望使用一个“后端”来实现要支持的每个API的基本功能,而一个“前端”则是程序员用来在程序上绘制内容的东西。屏幕。 我怎么知道我是否过于严格的抽象?

2
我通常一次可以绑定多少个纹理?
我正在开发一个游戏引擎,并且只能在现代(Shader Model 4+)硬件上工作。我认为,当我完成此工作时,这将不是一个不合理的要求。 我的问题是:现代图形卡上一次可以绑定多少个纹理?16就足够了。我可以期望大多数现代图形卡支持这种数量的纹理吗? 我的GTX 460似乎支持32,但是我不知道这是否代表大多数现代视频卡。

6
是否有理由添加选项以在游戏引擎中不使用高级技术?
我一直在开发游戏引擎,并且一直在探索和阅读诸如各向异性过滤,环境光遮挡,抗锯齿等游戏技术。 通常在游戏中,您可以打开或关闭这些设置。但是,如果这些设置只增加肯定值,那么是否有理由在开发者的游戏引擎中为其添加切换值? 我了解性能是一个主要因素,但是还有其他原因为什么这些设置始终可以更改?

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.