问题标签 [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.
objective-c - 在 MetalKit 应用程序中处理输入事件
我使用使用 MetalKit 的“游戏”模板在 Xcode 中的 OS X 上创建了一个应用程序。如何处理 keyDown 和 keyUp 等输入事件?我尝试添加
进入 AppDelegate 和 GameViewController 但当我按下一个键时它们不会被调用。
swift - ModelIO 框架不工作
我正在尝试导入 3D 模型文件并Metal
使用ModelIO
and渲染它们MetalKit
(在 OS X 10.11 上),但我从这些框架中看到的行为(特别ModelIO
是)与预期的不同。
我可以导入.obj
文件并将它们转换为MetalKit
网格而不会导致任何错误,但是网格(至少在渲染下)似乎只是三角形的大风扇,所有三角形都从一个点发出。下面截图中的模型应该是“Suzanne”猴头的细分版本:
经检查,导入文件中的顶点索引MDLSubmesh
没有任何意义。连续的索引集一直引用 index 处的顶点0
,有时在同一组索引中多次引用,这将解释渲染期间的外观。我已经确认这个.obj
文件可以很好地导入到其他应用程序中。
我曾尝试导入其他 3D 文件格式(框架正式支持所有格式),但任何格式都不会导致调用's时.obj
未被捕获。NSException
MDLAsset
init()
我正在使用 Xcode 7.2 并针对 OS X 10.11。
ios - MTLRenderPassColorAttachmentDescriptor.clearColor 不尊重 alpha 值
我是 Metal 新手,正在尝试在另一个 NSView 之上添加一个金属视图。在金属视图(MTKView)中,我想在清晰(透明)背景上渲染一个三角形。但是,MTKView 的背景始终是纯色。这是我尝试过的:
我将 NSView 的背景颜色设置为清晰的颜色:
我已经验证了这个视图实际上比另一个视图更清晰(在 drawRect 中没有呈现任何内容)。
如果我开始在 drawRect 中渲染我的三角形,它总是在纯色背景上。我能够更改背景颜色 RGB 值,而不是 A。它始终是纯色。
关于如何在渲染任何内容之前用透明颜色清除纹理的任何建议?
谢谢你。
更新:我似乎已经回答了我自己的问题,并正在用它更新这篇文章,以便其他人可以发现这很有用。
诀窍似乎是将图层设置为透明。
metal - 重叠金属点基元和混合
我正在渲染部分重叠的点图元。片段着色器对每个 Point 图元正方形透明(实心圆)的部分进行着色。不与任何其他点图元重叠的点图元,按预期着色(正方形的透明区域显示背景)。
当这样的点图元与另一个点图元重叠时,这种行为是出乎意料的。具体来说:透明区域不显示unlerlying points图元的不透明颜色,而是将其清除并显示背景颜色。
换句话说,具有较高顶点 ID 号的点图元会清除具有较低顶点 ID 号的点图元的先前阴影片段。
点基元编码如下:
顶点和片段着色器如下所示:
结果如下所示:
我想了解如何防止清除重叠的透明区域但保持背景的透明度。
谢谢你。
2016 年 5 月 25 日更新:
我能够打开固定功能混合与这些添加到我的渲染管道描述符:
现在事情看起来和预期的一样:
ios - CVMetalTextureCacheCreateTextureFromImage 总是返回 null
我正在尝试通过 MetalKit 渲染 I420 (YCbCr planner)
大多数示例都使用来自 Camera 的 CMSampleBuffer,
但我的目标是使用给定的 I420 字节。
我做这样的事情:
基本上代码与其他示例几乎相同,但我自己创建了自己的 CVPixelBuffer。
我在创建 CVPixelBuffer 和 CVMetalTexture 时没有出错,
但它总是为 yTexture 返回 null。
如何创建正确的 CVPixelBuffer 并使用它进行渲染?
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。
ios - 使用 Metal Kit iOS 从底部到顶部的水流
我正在创建一个应用程序,其中水将从底部流向顶部。我使用来自https://github.com/FlexMonkey/ParticleLab的源代码做了很多更改
请在下面的链接上找到视频,这看起来像牛奶,但我正试图让它成为真正的水流。 http://expirebox.com/download/6e3c11ca4fb969df976b51628d1d9c89.html
ios - 带金属的索引图
我正在尝试加载模型(表单 .OBJ)并使用 MetalKit 在 iOS 上将其绘制到屏幕上。问题是我得到了一些随机多边形而不是我的模型......这是倾向于加载模型的代码(代码基于raywenderlich.com的教程:
这是我的绘图方法:
这是我的顶点着色器:
这是它的样子:
实际上,我还有一个完全由我编写的用于加载模型的类。它工作正常,问题是它没有使用索引,所以如果我尝试加载比低多边形球体更复杂的模型,GPU 崩溃......无论如何我试图修改它以使用索引并且我得到了同样的结果..比我添加硬编码索引进行测试,我得到了一个非常奇怪的结果。当我有 3 个索引时,它绘制了一个三角形,当我再添加 3 个时,它绘制了相同的三角形,在再增加 3 个顶点后,它绘制了 2 个三角形......
编辑:
这是我的Vertex
结构:
metal - 旋转、平移和默认相机位置
我只是在玩模板设置MTKView
;而且,我一直在尝试了解以下内容:
相机的默认位置。
使用
MDLMesh
和创建基元时的默认位置MTKMesh
。为什么旋转还涉及平移。
相关代码:
前面的代码来自_update
模板的方法;显然,它正在尝试旋转模型而不是相机。但令我困惑的是,它还需要翻译。我读过诸如“因为它总是在旋转(0, 0, 0)
”之类的说法。但是为什么(0, 0, 0)
,如果对象被放置在其他地方呢?此外,在我看来,相机正在查看正 z 轴(问题 1)而不是通常的负 z 轴,因为如果我改变:
到:
屏幕上不会显示任何内容,因为对象似乎位于相机后面,这意味着相机正在查看正 z 轴。
如果我设置(全为零),则对象不会像我预期的那样matrix_from_translation(0.0f, 0.0f, 0.0f)
在 y 轴(问题 3 )上旋转。
我试图找出默认放置MDLMesh
and的位置(问题 2),但我找不到记录其位置的属性。以下也是通过模板创建原语的方式:MTKMesh
在不知道上述方法生成的位置的情况下,它阻碍了我对旋转和平移如何工作以及相机在 Metal 中的默认位置的理解。
谢谢。
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.