Questions tagged «graphics-programming»

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

3
重建阴影效果
我会简短。如何实现下图所示的效果?实时进行是否可行?它看起来看似简单,但事实并非如此。我可以搜索任何关键字以获取有关对着色器进行编程以实现此外观的更多信息吗?谢谢。

4
调试着色器代码?
我正在编写一个游戏引擎,当我使用透视相机时,屏幕会黑屏。我不会确切地问这是为什么,因为会有很多代码要共享,并且坦率地说,我认为即使打扰大家,这也是一个小问题。 麻烦在于我不知道如何调试它。所有更改都是我的投影矩阵,如果我的投影矩阵看起来不错,我不知道为什么它不起作用。理想情况下,我将在着色器进行计算时打印出各种东西的值,但是GLSL不方便地没有printf()函数。 所以我的问题是:如何调试我的问题?我唯一想到的就是在客户端检查尽可能多的值,然后通过置换进行编程,但是我这样做并没有成功。有什么方法可以查看视频卡中发生的情况?我可以使用一种完全不同的技术吗? 我使用的是GLSL 420版(以及该版本的特定功能),因此考虑到上次更新是2010年,我不认为glslDevil是一个选项。 编辑 我设法通过一些完全不相关的调试解决了我的问题。

1
通过Alpha混合精灵查看着色器的轮廓
我想在Unity中实现类似于以下示例中的透视效果: 在我的特定情况下,有两个要求: 子画面使用Alpha混合,并且子画面具有透明区域。 遮挡字符有2种元素。一个应创建轮廓效果,而另一个应具有正常的行为。 对于遮挡创建轮廓的元素,我启用了ZWrite,并为没有轮廓的元素禁用了它。 对于角色,我尝试将着色器的队列设置为transparent + 1,并添加了此步骤: Pass { ZTest Greater Lighting Off Color [_Color] } 效果部分起作用: 轮廓绘制在整个角色上,甚至透明的部分。透明的部分不应创建轮廓。 当角色在精灵后面时,即使该精灵的那部分是透明的,也会创建轮廓。在精灵的透明部分后面不应创建轮廓。 角色出现在其余元素的前面,即使它位于它们的后面。我猜这是因为将队列设置为“透明+1”。但是,如果我将其保留为“透明”,则会以正确的顺序绘制角色,但永远不会看到轮廓。 我尝试遵循某人给我的这些提示,但无法使其正常工作: 1)保留渲染精灵的过程。 2)添加一个写入z缓冲区的通道,但是具有一个着色器,该着色器使用clip()丢弃基于alpha的像素。如果不使用MSAA和alpha-to coverage,则不能使用z缓冲区进行软性z测试。这样的质量不会很好,但是这是您可以做到的最好的。更快的替代方法是图案或噪声抖动,或者,如果您的精灵都具有相当尖锐的边缘,则可以使用老式的阈值。 3)向使用z测试绘制遮挡颜色的可遮挡对象添加第三遍,并确保将其绘制为最终遍。 我是着色器的新手,尤其是在Unity中,我只是想不出如何使其正常工作。

1
学习图形硬件的好资源[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我正在寻找有关图形硬件(和相关的底层软件)的良好学习资源。基本上,我想了解更多关于opengl / direcx API层下的实现方式。 我熟悉渲染管线各个阶段(查看,投影,裁剪,光栅化等)中发生的原理变化。 我的目标是在针对以下问题进行图形/着色程序编程时,能够就折衷和潜在的优化做出更好,更明智的决策; 批处理 视图剔除 咬合 签单 避免状态变化 三角形vs点数 纹理采样 等等 基本上,图形程序员需要了解现代图形硬件以提高效率。 我并不是真正在寻找特定的优化技术,而是需要更多的一般知识,以便自然地编写更有效的代码。

1
如何在地形中表示悬崖面?
我正在尝试找出在游戏中以编程方式表示地形的最佳方法。我一直在考虑使用高度图(或等距顶点的网格)来表示地形的表面,并使用Splatmap来实现平滑的纹理化。这对于完全平滑的地形是可行的,但是问题是如何表示悬崖和陡峭的悬崖面。 悬崖本身的呈现方式必须与其余地形不同。例如,他们将需要在悬崖的前面看到不同的(未拉伸的)纹理,但是如果我为此使用splatmap,就不可能在悬崖的纹理上拥有足够多的悬崖面与地面完全分开。 图片说了一千个字,所以... 有什么一般的方法可以存储和/或渲染悬崖以及其他地形高度差异?

3
将粒子绘制为平滑斑点
我是游戏/图形开发的新手,并且正在玩2D粒子。我想像液体/水一样将斑点彼此靠近地绘制为斑点。我不想绘制重叠的大圆圈,因为斑点不会很平滑(太大)。我不是很了解物理学,但是我想我想要的是看起来与表面张力相似的东西。 我无法在stackexchange或Google上找到任何内容(也许我不知道正确的关键字?)。到目前为止,我已经找到了两种可能的解决方案,但是我无法找到有关算法的任何具体信息。 其中之一是计算我认为是斑点的粒子的凹壳。我可以通过创建一个等效类(基于“彼此靠近”的关系)来计算blob。奇怪的是,我无法找到任何算法来解释如何计算凹面船体。许多文章(以及stackexchange中的文章)都链接到执行此操作的库或商业产品(我需要库才能在C#中工作),但从来没有任何算法。同样,此解决方案可能会遇到一个圆形的粒子问题,该粒子无法检测到中间的空白区域。 在研究凹壳时,我偶然发现了一种叫做alpha形状的东西。这似乎正是我想要做的,但是就像凹壳一样,我还没有找到任何解释它们实际工作原理的资料。我找到了一些演示材料,但还不够继续。就像我以外的每个人都知道的一个大秘密:-/ 计算凹壳或alpha形状后,我想使其成为贝塞尔曲线以使其平滑且美观。 尽管我确实发现自己的方法过于复杂,但是也许我正在尝试以错误的方式解决此问题?如果您可以对我的问题提出其他解决方案,或者解释我所缺少的内容,我将非常高兴和感激:-) 谢谢。

7
创建简单粒子效果的最快方法
我正在寻找创建真正简单的粒子效果的最快方法,该效果在游戏中会像地狱般被散布。 基本上,我的游戏看起来像是vectrex游戏,主要由线条组成...我想进行一些小爆炸,这确实很常见。 有什么比仅移动某些点并使用GL_Point渲染更快的方法吗?

1
什么是屏幕空间导数?何时使用它们?
我偶尔看到着色器代码中出现了ddx和ddyglsl函数以及hlsl等效项。我目前正在使用它们来进行不切线或不切线的凹凸贴图,但是我基本上是复制粘贴了代码。我不了解这些功能的实际含义,作用以及何时使用它们。 所以问题: 屏幕空间派生函数是什么? 这些功能做什么?输入值和输出值 它们最常用于什么效果? 什么样的效果需要您关注这些功能?

2
如何告诉片段着色器不写特定像素?
在WebGL中,我想发送一个由片段着色器处理的屏幕空间四边形,但是让片段着色器仅在特定条件下写出一个像素(例如……它在一个圆圈内,或者像素属于由曲线方程式等定义的半空间的正侧)。 片段着色器中是否可以说“不写像素”? 我知道这可以使用其他各种方法来完成,例如Alpha混合,先渲染然后将其放置在不想绘制像素的背景颜色上,或者对深度或模板缓冲区进行一些技巧。我也知道我可以创建一堆几何体来匹配我要渲染的几何体。 是否有办法使片段着色器选择根本不写像素?

2
贴花实施
我在查找有关贴花的信息时遇到了问题,因此也许这个问题会对他人有所帮助。该实现适用于前向渲染器。 有人可以确认我是否可以执行贴花吗? 您可以定义任意尺寸的立方体,以定义公共空间中的投影体积。您检查与定义的立方体的三角形相交以接收投影将影响的三角形。 您修剪这些三角形并保存它们。 然后,您可以使用矩阵技巧来为已保存的三角形计算UV坐标,这些三角形将参考您要投影的纹理。 为此,您可以使用表示公共空间中立方体的高度,宽度和深度的向量,以使fe的左下角为原点。 将其作为i,j,k单位向量放入矩阵中,设置多维数据集的平移,然后对该矩阵求逆。 您可以将保存的三角形的顶点乘以该矩阵,这样就可以将它们的坐标保存在用作UV坐标的0到1大小的立方体内。 这样,您可以将原始三角形投影到其上,并具有UV坐标(UV坐标参考要投影的纹理)。 然后,将保存的三角形重新渲染到场景上,它们将用投影图像覆盖投影区域。 现在,我找不到答案的问题。最后一点对吗?我从未做过软件裁剪,但由于精度有限,似乎容易出错,因为投影纹理会发生一些z争斗。另外,获得UV坐标的方法是否正确?

1
在OpenGL中,什么是“零状态”渲染?
最近在一次工作面试中,我提到我自学了现代OpenGL和如何使用顶点缓冲对象进行渲染,因为我的大学当时只教固定功能管道进行即时模式渲染。面试官简短地打扰了我,说VBO已被“零状态渲染”所代替,然后让我继续。 后来我忘了问这是什么意思了,因为我们很快转到了其他主题,并且由于忙碌的日程表,面试官最终没有时间了。 后来,我在网上搜索了“ OpenGL零状态”和“零状态渲染”,没有似乎相关的结果,大部分只是关于OpenGL状态的信息。 所讨论的组织是基于大量研究的,因此是否有可能是目前很少支持的扩展,还是由于其尖端的性质而使使用的术语有所不同?

2
渲染之前对对象进行排序
我正在尝试实现一个场景图,在我遇到的所有文章中都谈到了对象排序。因此,您可以按“材料”对对象进行排序。现在直到我坐下来并开始执行它,我都认为这是理所当然的,因为它是有道理的。但是现在我想知道排序实际上会发生什么变化? 在我的引擎中,我有一个UBO经理,我使用UBO来存储将在程序之间共享的数据,目前仅涉及时间,相机和投影矩阵以及灯光(我不担心管理哪些灯光会影响哪些对象是ATM)。 现在,对于每个模型,我都必须将模型更改为世界矩阵统一模型,而没有排序方法可以改变它。那么,从更改此矩阵到同时为每个对象设置不好的材质的跳转又是不是? 我隐约记得在某处阅读过,每次您更改管道中的某些内容时,都必须将其刷新,这可能会导致性能问题。但是无论如何,对于每个绘图调用,我都会为世界矩阵建立一个模型,因此对这个问题有什么意义呢? 顺便说一句,关于更改制服并调用glBufferSubData是否更(或更少)昂贵,有任何信息。

1
图形编程可复制门内Chrono Trigger的过渡
我最近第一次开始玩这个游戏,这真的使我的兴趣达到顶峰 您可以看到运动的过渡从〜12:08开始 那里似乎发生了一些有趣的数学运算。似乎有两个不同的视图组合在一起。首先在背景中渲染蓝色波纹,然后在某种伪3D投影上渲染紫色振荡波。 然而,他们如何精确地达到这一结果超出了我的范围,好奇心使我变得更好。 我不希望很多人知道这是如何完成的,但是如果有人进行了广泛的图形编程,也许他们会启发我。

1
关于图形编程的好书吗?
我一直在寻找一本采用自下而上的图形编程方法的书。因此,从2D过滤开始,可能是进入法线贴图,然后是环境光遮挡等。 我问是因为最近几年我在游戏开发方面一直很懒惰,并且一直使用能够处理此问题的引擎。我想开始为游戏编写一些着色器,而不是依靠过去借用的神秘着色器。我认为在这方面有很强的知识会有所帮助,而且我是一个自下而上的学习者,请帮助我! 我知道GPU Gems系列很棒,但是它们似乎更像是一本食谱,而不是我想要的自下而上的方法。您往往会从食谱中获得更多分散的理论,而不是基于前几章的理论。 编辑:最好是你读过的东西!我可以在亚马逊上搜索此内容,但是很难以这种方式进行公正的评论。
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.