问题标签 [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 投票
2 回答
1141 浏览

scenekit - 我从 SCNScene 创建了 MDLAsset。如何提取 MDLMesh、MDLCamera(s) 和 MDLLight?

我正在努力尝试遍历MDLAsset通过加载SCNScene文件 (.scn) 创建的实例。

我想识别和提取MDLMeshs 以及相机和灯光。我认为没有直接的方法可以做到这一点。

例如,我在 MDLAsset 上看到了这个实例方法:

这是我用的吗?

我已经在 SceneKit 建模器中仔细标记了事物。我可以不参考那些理想的吗?当然,有一本我可以访问的 ids/labels 字典。我在这里想念什么?

更新 0

由于完全缺乏 Apple 文档,我不得不求助于 Xcode 调试器中的场景图。叹息...

在此处输入图像描述

一些东西。我看到了MDLMeshMDLSubmesh这就是我所追求的。获取它的遍历方法是什么?灯光和相机也是如此。

我还需要知道顶点描述符的布局,以便与我的着色器同步。我可以在 parsed 上强制使用特定的顶点布局SCNScene吗?

0 投票
2 回答
1144 浏览

metal - 如何从 MDLMeshBufferData 中提取数据以填充 MTKMeshBuffer?

我需要从 MDLMeshBufferData 实例创建一个 MTKMeshBuffer 实例。这是一个代码片段:

这 ???是我需要填写的位。有人可以向我展示用于从 MDL 缓冲区中提取位以填充 MTK 缓冲区的正确 API 吗?

0 投票
1 回答
1293 浏览

ios - 在金属中同时有纹理和无纹理,具有多重混合

我在金属中绘制了 2 个不同的顶点缓冲区,一个带有纹理(忽略顶点颜色数据),另一个没有纹理(仅绘制顶点颜色数据):

着色器如下所示:

这是有更好的方法吗?我想使用我设置为黑色的纹理的任何顶点,着色器检查颜色是否为黑色,如果是,则使用纹理,否则使用颜色。

另外,如果彩色多边形和纹理多边形在屏幕上重叠,有没有办法使用乘法函数将它们混合在一起?似乎 MTLBlendOperation 只有加/减/最小/最大选项,没有乘法?

0 投票
2 回答
715 浏览

c++ - 为什么 C++ 顶点函数中有两个括号 [?

我正在观看 Apple 关于 Metal 和 MetalKit 的介绍视频。

着色器的示例代码有这些双括号,如[[buffer(0)]]参数。为什么有两个括号?这是什么意思,还是只是表明后面有关键字“缓冲区”?标准 C++ 中没有这样的结构,是吗?

另外,作为 GP-GPU 的介绍,什么是一个好的 1 或 2 周有趣的项目?对于具有良好数学技能但没有艺术技能的新手来说,这是可以管理的。

0 投票
1 回答
624 浏览

pointers - Metalkit:Swift 3 中的 MTLBuffer 和指针

我从 Metalkit 开始,我有一个非常简单的内核作为测试用例。

此“计算”数据存储在MTLBuffer.

此时内核已将一些测试数据写入MTLBuffer. 问题是我应该如何从我的主程序访问这些数据?

unsafeMutableRawPointerbuffer.contents(). 如何获得可以在其他任何地方使用的快速值数组(显示在屏幕上,写入文件,...)?

这些片段在这个非常简单的应用程序中工作,但我不确定它们是否正确:

bindMemoryassumingMemoryBound工作。虽然assumingMemoryBound假设底层字节已经输入并且bindMemory没有。我认为其中一个应该工作,但不能同时工作。应该是哪一个,为什么?

0 投票
0 回答
300 浏览

ios - 如何使用 metalkit 绘制 3D 线

我正在尝试在 iOS 中使用 metalkit 绘制 3D 线,我添加了两个顶点

我正在应用带有旋转角度的模态矩阵。

但这条线是连续旋转的,我尝试使用平移矩阵,但没有观察到差异。

实际上,我的任务是在 3D 中为增强现实画一条线,使用latitudelongitude沿它们的路径放置标记。

作为第一步,我正在尝试使用金属绘制 3D 线。请参考使用 metalkit 绘制 3D 线的任何示例,大多数示例都是三角形。

0 投票
0 回答
747 浏览

ios - 如何在 Metal 中将具有透明度的图像放在另一个图像上?

每当我尝试在 Metal 中对具有透明部分的图像进行 blit 处理时,透明部分都会被黑色替换。

需要明确的是,我的图像不包含任何半透明像素。它们要么是纯色的,要么是完全透明的。

我有一个简单的 ViewController 设置 Metal 并尝试 blit 2 图像。但是第二张图片的透明部分是黑色的,不会显示下面的第一张图片。

任何帮助将不胜感激!

0 投票
0 回答
217 浏览

swift - 使用 MetalKit 渲染文本

有没有办法在 MetalKit 中呈现文本?

我找到了这个链接(在 Obj.C 和 iOS8 中),我想知道是否有一个更新的例子可以显示在 Swift 中的 MetalKit 文本渲染?

还有什么可以帮助的是如何将 UIView 渲染到 MetalKit 中。有人知道一个例子吗?

0 投票
1 回答
1992 浏览

glsl - 金属着色语言 - FragCoord 等价物?

我试图将这个 shadertoy 场景翻译成Metal Kernel. 在着色玩具代码中:

以防万一OpenGL,我们需要iResolutionglfw窗口发送。并且fragCoord将从. gl_FragCoord_Fragment Shader

我在metal文件中有这个:

所以我可以iResolutionwidthand得到我的height。但我不确定如何获得gl_FragCoord.

Metal_stdlib有相当于的东西吗gl_FragCoord?或者如果我必须计算,我怎样才能获得相同的值?

0 投票
1 回答
1401 浏览

swift - 启用混合使 renderPipelineState 无法在 MetalKit MTKView 中构建

我正在渲染一个在 metalkit 中有一些半透明区域(alpha < 1)的几何体MTKView。如果isBlendingEnabled在渲染管道状态的描述符中保留为 false,则所有内容都按应有的方式显示(尽管使用所有纯色)。

我知道渲染半透明对象取决于绘制顺序。目前,我只想测试 alpha 混合看起来像半透明区域与渲染缓冲区中已有的混合,即使它只是混合到背景(此时仍然只是清晰的颜色)。

但是,当我尝试启用混合时,makeRenderPipelineState失败并出现以下错误:

编译器无法构建请求错误域=编译器错误代码=1“片段着色器未写入渲染目标颜色(0),混合所需的索引(1)”

这是尝试在 MTKView 的委托中构建管道状态的代码。它从 MTKView 继承属性的地方,我已将这些属性的值放在注释中

鉴于错误抱怨color(0),我将color[0]绑定添加到片段着色器的输出中:

最后,绘制代码:

我没有在片段着色器中明确设置任何纹理。这是否意味着 currentDrawable 隐含地是索引 0 处的颜色附件?为什么要color(0)在索引 1 处看到错误消息?混合是否需要两个颜色附件?(它不能只是添加到已经渲染的东西上吗?)

谢谢。