问题标签 [metalkit]

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 投票
4 回答
1682 浏览

objective-c - 在 MetalKit 应用程序中处理输入事件

我使用使用 MetalKit 的“游戏”模板在 Xcode 中的 OS X 上创建了一个应用程序。如何处理 keyDown 和 keyUp 等输入事件?我尝试添加

进入 AppDelegate 和 GameViewController 但当我按下一个键时它们不会被调用。

0 投票
1 回答
1004 浏览

swift - ModelIO 框架不工作

我正在尝试导入 3D 模型文件并Metal使用ModelIOand渲染它们MetalKit(在 OS X 10.11 上),但我从这些框架中看到的行为(特别ModelIO是)与预期的不同。

我可以导入.obj文件并将它们转换为MetalKit网格而不会导致任何错误,但是网格(至少在渲染下)似乎只是三角形的大风扇,所有三角形都从一个点发出。下面截图中的模型应该是“Suzanne”猴头的细分版本: 错误导入的 .obj 文件

经检查,导入文件中的顶点索引MDLSubmesh没有任何意义。连续的索引集一直引用 index 处的顶点0,有时在同一组索引中多次引用,这将解释渲染期间的外观。我已经确认这个.obj文件可以很好地导入到其他应用程序中。

我曾尝试导入其他 3D 文件格式(框架正式支持所有格式),但任何格式都不会导致调用's时.obj未被捕获。NSExceptionMDLAssetinit()

我正在使用 Xcode 7.2 并针对 OS X 10.11。

0 投票
0 回答
1163 浏览

ios - MTLRenderPassColorAttachmentDescriptor.clearColor 不尊重 alpha 值

我是 Metal 新手,正在尝试在另一个 NSView 之上添加一个金属视图。在金属视图(MTKView)中,我想在清晰(透明)背景上渲染一个三角形。但是,MTKView 的背景始终是纯色。这是我尝试过的:

我将 NSView 的背景颜色设置为清晰的颜色:

我已经验证了这个视图实际上比另一个视图更清晰(在 drawRect 中没有呈现任何内容)。

如果我开始在 drawRect 中渲染我的三角形,它总是在纯色背景上。我能够更改背景颜色 RGB 值,而不是 A。它始终是纯色。

关于如何在渲染任何内容之前用透明颜色清除纹理的任何建议?

谢谢你。

在此处输入图像描述

更新:我似乎已经回答了我自己的问题,并正在用它更新这篇文章,以便其他人可以发现这很有用。

诀窍似乎是将图层设置为透明。

0 投票
0 回答
654 浏览

metal - 重叠金属点基元和混合

我正在渲染部分重叠的点图元。片段着色器对每个 Point 图元正方形透明(实心圆)的部分进行着色。不与任何其他点图元重叠的点图元,按预期着色(正方形的透明区域显示背景)。

当这样的点图元与另一个点图元重叠时,这种行为是出乎意料的。具体来说:透明区域不显示unlerlying points图元的不透明颜色,而是将其清除并显示背景颜色。

换句话说,具有较高顶点 ID 号的点图元会清除具有较低顶点 ID 号的点图元的先前阴影片段。

点基元编码如下:

顶点和片段着色器如下所示:

结果如下所示:

在此处输入图像描述 在此处输入图像描述

我想了解如何防止清除重叠的透明区域但保持背景的透明度。

谢谢你。

2016 年 5 月 25 日更新:

我能够打开固定功能混合与这些添加到我的渲染管道描述符:

现在事情看起来和预期的一样:

在此处输入图像描述

0 投票
1 回答
2646 浏览

ios - CVMetalTextureCacheCreateTextureFromImage 总是返回 null

我正在尝试通过 MetalKit 渲染 I420 (YCbCr planner)

大多数示例都使用来自 Camera 的 CMSampleBuffer,

但我的目标是使用给定的 I420 字节。

我做这样的事情:

基本上代码与其他示例几乎相同,但我自己创建了自己的 CVPixelBuffer。

我在创建 CVPixelBuffer 和 CVMetalTexture 时没有出错,

但它总是为 yTexture 返回 null。

如何创建正确的 CVPixelBuffer 并使用它进行渲染?

0 投票
1 回答
247 浏览

metal - 为什么 MDLMesh 有未命名的默认属性?

我正在发现Model I/O并且我想用它来生成顶点来创建一个球体,所以我MDLMesh使用这个类方法创建了一个对象:

然后,为了了解它是如何工作的,我想检查我的这个 MDLMesh 的属性,所以我以这种方式阅读它们:

这是输出:

属性命名:位置,格式 786435
属性命名:正常,格式 786435
属性命名:textureCoordinate,格式 786434
属性命名:,格式 0 属性命名:,格式 0
属性命名:,格式 0 属性命名:,格式格式 0
命名属性:,格式 0 属性命名:,格式 0
属性命名:,格式 0 属性命名:,格式 0
属性命名:,格式 0 属性命名:,格式 0
属性命名:,格式0 属性命名:,格式 0
属性命名:,格式 0 属性命名::,格式 0
属性命名::,格式 0 属性命名::,格式 0
属性命名: , 格式0 属性命名: , 格式0
属性命名: , 格式0 属性命名: , 格式0
属性命名: , 格式0 属性命名: , 格式0
属性命名: , 格式0 属性命名
属性 : , 格式 0 属性命名 : , 格式 0 属性命名 : , 格式 0
属性命名 : , 格式 0 属性命名 : , 格式 0

我相信位置和法线是自动生成的,但为什么会有纹理坐标?使用什么规则来生成这些?最重要的是,为什么会有所有这些无效格式的未命名属性?

谢谢

编辑:似乎有固定数量的属性(在我的情况下为 31 个),因为即使我添加新的自定义属性(例如通过生成法线),无效的属性也会被这些新属性和总数替换属性数仍然是 31。

0 投票
0 回答
606 浏览

ios - 使用 Metal Kit iOS 从底部到顶部的水流

我正在创建一个应用程序,其中水将从底部流向顶部。我使用来自https://github.com/FlexMonkey/ParticleLab的源代码做了很多更改

请在下面的链接上找到视频,这看起来像牛奶,但我正试图让它成为真正的水流。 http://expirebox.com/download/6e3c11ca4fb969df976b51628d1d9c89.html

在此处输入图像描述

0 投票
1 回答
2357 浏览

ios - 带金属的索引图

我正在尝试加载模型(表单 .OBJ)并使用 MetalKit 在 iOS 上将其绘制到屏幕上。问题是我得到了一些随机多边形而不是我的模型......这是倾向于加载模型的代码(代码基于raywenderlich.com的教程:

这是我的绘图方法:

这是我的顶点着色器:

这是它的样子:

关联

实际上,我还有一个完全由我编写的用于加载模型的类。它工作正常,问题是它没有使用索引,所以如果我尝试加载比低多边形球体更复杂的模型,GPU 崩溃......无论如何我试图修改它以使用索引并且我得到了同样的结果..比我添加硬编码索引进行测试,我得到了一个非常奇怪的结果。当我有 3 个索引时,它绘制了一个三角形,当我再添加 3 个时,它绘制了相同的三角形,在再增加 3 个顶点后,它绘制了 2 个三角形......

编辑: 这是我的Vertex结构:

0 投票
1 回答
1425 浏览

metal - 旋转、平移和默认相机位置

我只是在玩模板设置MTKView;而且,我一直在尝试了解以下内容:

  1. 相机的默认位置。

  2. 使用MDLMesh和创建基元时的默认位置MTKMesh

  3. 为什么旋转还涉及平移。

相关代码:

前面的代码来自_update模板的方法;显然,它正在尝试旋转模型而不是相机。但令我困惑的是,它还需要翻译。我读过诸如“因为总是在旋转(0, 0, 0)”之类的说法。但是为什么(0, 0, 0),如果对象被放置在其他地方呢?此外,在我看来,相机正在查看正 z 轴(问题 1)而不是通常的负 z 轴,因为如果我改变:

到:

屏幕上不会显示任何内容,因为对象似乎位于相机后面,这意味着相机正在查看正 z 轴。

如果我设置(全为零),则对象不会像我预期的那样matrix_from_translation(0.0f, 0.0f, 0.0f)在 y 轴(问题 3 )上旋转。

我试图找出默认放置MDLMeshand的位置(问题 2),但我找不到记录其位置的属性。以下也是通过模板创建原语的方式:MTKMesh

在不知道上述方法生成的位置的情况下,它阻碍了我对旋转和平移如何工作以及相机在 Metal 中的默认位置的理解。

谢谢。

0 投票
1 回答
848 浏览

scenekit - How do I load/parse a SceneKit .scn file into my Metal app?

I want to create a 3D scene with the SceneKit modeler and then read it into my Metal app. I see there is SceneKit and ModelIO API to do this but I am unclear on how the pieces fit together.

So, what I need is path from .scn file -> MDL Mesh -> geometry + texture. I am unclear on how I would sync my Metal shaders with materials created in the SceneKit modeler.