Articles of 深度

OpenGL绘制精灵的sorting

我将采用自顶向下的方法,其下方的对象将出现在其上方。 因此,Y值决定了它是否重叠(想象一下纸牌游戏中纸牌的堆叠方式,每张纸牌下方的纸牌确保它在最上面)。 角色精灵将移动并不断改变其顺序(以及任何效果或其他世界对象)。 我已经尝试过的事情不起作用:为每个订单单独绘制组。 不幸的是,由于地图,游戏对象和精灵的庞大规模,它需要每个Y轴都有自己的组,导致数百个绘制组。 这杀死了性能太多。 我已经尝试z深度sorting,问题是阿尔法混合不再正常工作,因为它通常。 所以褪色精灵和其他阿尔法混合模式显示不正确。 我已经尝试了所有可能的值的摆弄组合,以得到这个工作,但没有骰子。 我曾尝试使用一个大的有序的VBO,它的工作,但问题是它需要一切需要订购在相同的纹理地图集。 虽然不错,如果我想制作一个更大的游戏,不可能将所有的资源都放在一个纹理中。 尤其是世界+人物+特效。 我发现的唯一的工作是使用旧的OpenGL固定function,并一次绘制每一个,并使用列表sorting,以确保顺序。 但是这意味着没有着色器和性能缺陷。 我已经用尽了谷歌和实验的选项。 我宁愿不使用固定function,如果我可以帮助它,但我现在真的没有看到任何其他的方式。 我想知道是否有其他的select。

通过深入检查绘制的对象提高性能

所以我画了很多LINE_STRIPS,它们都被渲染成彼此之间的顶部。 我很乐意使这个更有效率,但我不知道我必须做什么。 我有性能问题,我不知道他们是否会改善如果我可以实施某种深度检查,如果他们在彼此的顶部。 我可以尝试先画出最后一行,并将Z值设置为行号的1 / index? 所以,如果第一行的Z值小于这个像素和已经画出的线,那么它就不需要渲染了。 只是一个想法,我没有真正的线索如何深度testing的工作,如果我可以提高总量的数量或面积以这种方式。 我正在使用SharpDx,并创建一个DepthStencilState和DepthStencilView。 另外我创建一个深度纹理。 我不确定他们是如何工作的。 使用此示例代码: https : //msdn.microsoft.com/en-us/library/windows/desktop/bb205074(v=vs.85).aspx 我在正确的方式做到这一点? 我是新来的DirectX,任何意见表示赞赏。 谢谢。 编辑: 添加图片,你可以看到一些信号的负载正在增加,这些信号会吸引大量的区域(高频正弦)。 GPU的负载正在增加到100%,如果达到这个水平,那么由于队列堵塞和GPU负载,基准testing显示当前时间大幅增加。 所以我想改善这一点。 我的意思是这些曲线相互交叉,所以我想了一下深度检查? 编辑2:为了更好的理解,图纸随着时间的推移从左到右增加,所以在t = 0时没有任何东西,假设t = 30s是整个画面。 这里一切都还好 这里的performance跳跃击中了它:

模拟2D场景中的3D高度(也是阴影)

我最近偶然发现了这个http://vimeo.com/99118680video,被美丽的彩绘艺术和色彩震撼了。 但大多数我都不能相信,尽管所有的2D图像和精灵都是三维的, 我已经通过创作者的博客挖掘,找不到有关他们如何管理这种效果的任何有用的想法,所以我在这里给它一个镜头。 我的问题主要是关于树木的问题:我怎么能够做出一个2D精灵树,就像在3D中一样。 此外,如果任何人有任何想法,他们如何做阴影,我很想知道,也(我觉得他们是静态的,但不能确定)。

剪辑空间位置的Z值始终为1.0

我在屏幕上向z方向渲染大量四边形(20 x 2000)。 我想在最终的渲染目标中获得深度值。 但是看起来z总是1.0f。 我用OpenGLdebugging器检查了结果。 有什么建议? 顶点着色器: #version 410 layout(row_major) uniform UView { mat4 m_View; mat4 m_Projection; }; layout(row_major) uniform UModelMatrix { mat4 m_ModelMatrix; }; layout(location=0) in vec2 VertexPosition; out vec3 PSVSPosition; void main(void) { vec4 VSPosition = m_View * m_ModelMatrix * vec4(VertexPosition.xy, 0.0f, 1.0f); PSVSPosition = VSPosition.xyz; gl_Position = m_Projection * VSPosition; } […]

如何修复与自由度和雾团结奇怪的白色边缘?

我使用全球雾和标准资产景深脚本,但它对远处物体的边缘有一个奇怪的影响。 我怎样才能让树上的白色边缘顺利融入雾中?

使角色在对象后面移动

我用平铺编辑器为我自己的游戏制作地图,我不运行任何引擎或任何东西。 我在TiledEditor中分离了地形图层和对象图层。 然而,我有树的问题,我想让我的角色移动到树后面。 但我不知道如何,即使是不同的层我仍然是由8×8像素块渲染。 现在我的角色总是处于顶端,因为这是我呈现的最后一个东西。 但是如果我改变渲染顺序,我的角色就​​会在树后面,即使角色会留在树的前面,就像这样:

在Game Maker中将语句应用于单个实例?

我目前正在制作一个平台游戏,目前正在通过使Up / Down-W / S控制你的深度来创建“深度” 。 (靠近屏幕,走得更远)。 我select这样做的原因是我可以绕着楼梯走,走在桌子后面等等。 但是我遇到了一个问题。 当我调用我的播放器代码时, if (depth == oWall.depth) {//code} ,它将应用到每一个墙上 。 有没有办法让它适用于你目前正在接触的物体? 这是我的代码到目前为止: /// Collision // TODO: Make "depth" apply to a singular instance. // \/ \/ if (depth == oWall.depth) { /* Colliding with a wall on the Horizontal Axis, causes the player to stop moving. */ if […]

XNA广告牌没有正确的深度

我又回到了另一个问题:(我目前的问题是我的广告牌的效果。我试图深度正确,以便更接近玩家的广告牌面前的东西,实际上是在他们身后(如在真实世界)下面是这个问题的截图: https : //www.dropbox.com/s/rvgdsp0mw4kheak/Screenshot%202015-02-24%2018.47.32.png?dl=0 你可以看到位于前面的草实际上是在实际位于前面的草的后面。 我曾尝试使用… Globals.device.BlendState = BlendState.Opaque; Globals.device.DepthStencilState = DepthStencilState.Default; Globals.device.RasterizerState = RasterizerState.CullNone; 但它没有工作。 提前致谢! 有任何想法吗?

用于mouseover的GUI.Box z-index

所以我正在绘制一个插槽,如下所示: private void DrawItemSlotAndAttachActions(Item currentItem, Rect slotRectangle, Event e, int itemSlotPosition) { if (!(currentItem is EmptyItem)) { GUI.depth = 0; GUI.DrawTexture(slotRectangle, currentItem.Icon); if (slotRectangle.Contains(e.mousePosition)) { _tooltip = currentItem.CreateTooltip(); _showTooltip = true; DragAndDropItem(e, itemSlotPosition); UseConsumable(e, currentItem); } } else { DropItemOnEmptySlot(slotRectangle, e, itemSlotPosition); } } public void OnGUI() { _tooltip = ""; //reset every time…can this […]

如何在Unity 5中从鼠标位置制作dynamic自由度?

前段时间我发现了一个关于如何使dynamic自由度统一的video。 它从相机中发出光线,并在光线首先击中的位置放置一个空的光线。 我怎样才能改变这个,使它不会从我的相机发出光线,而是从我的鼠标位置发出光线,然后从那里定位空的位置? 码: public Transform origin; //Raycast origin public GameObject target; public CameraMovement cameraMovement; void Start () { } void Update () { Ray ray = new Ray(origin.transform.position, origin.transform.forward); RaycastHit hit = new RaycastHit(); if(Physics.Raycast(ray, out hit, Mathf.Infinity)){ Debug.DrawRay(Input.mousePosition, origin.transform.forward, Color.cyan); target.transform.position = hit.point; }else{ Debug.DrawRay(Input.mousePosition, origin.transform.forward, Color.red); } }