问题标签 [metal]

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 回答
2536 浏览

swift - 使用 CVMetalTextureCacheCreateTextureFromImage 在 Swift 中将 CMSampleBuffer 转换为 CVMetalTexture

我正在尝试让一个简单的渲染相机输出到金属层管道运行,它在 Objective-C 中运行良好(有 MetalVideoCapture 示例应用程序)但是当我尝试时似乎有一些格式怪异把它翻译成swift。我的超简单捕获缓冲区看起来像这样(忽略缺乏清理...)

videoTextureCache 在哪里var videoTextureCache: CVMetalTextureCache? = nil

但它给了我Cannot invoke 'CVMetalTextureCacheCreateTextureFromImage' with an argument list of type '(CFAllocator!, CVMetalTextureCache, CVImageBuffer, nil, MTLPixelFormat, Int, Int, Int, inout CVMetalTextureRef)'

问题是,如果我用 nil 替换 outTexture 它会停止抛出错误,但显然这对我没有帮助。根据函数的参考,我需要 UnsafeMutablePointer?> 作为最后一个值。我不知道如何得到。

0 投票
3 回答
2056 浏览

macos - - OSX 10.11 Beta 2 上的 [CAMetalLayer nextDrawable] 问题

每当我添加CAMetalLayer到 时NSView,该[CAMetalLayer nextDrawable]方法将nil在 3 成功后通过id<CAMetalDrawable>

我尝试了两种不同的方法来配置设置。一,我用过MTKView,用过它的CAMetalLayer,没用。第二,使用NSView和创造新的CAMetalLayer。那也没用。我有奇怪的问题。

我想知道其他人有这个问题,如果有人知道解决这个问题的方法。

附加说明:
我不想通过覆盖其方法(尚未)来使用 MTKView 绘制系统。这在 iOS 8 上也不是问题,我没有在 iOS 9 的 beta 版本中尝试过我的代码(还没有)。

更新

我重新路由我的可绘制调用以使用MTKViewDelegate委托。通过drawInView委托方法,我能够检索到一致的可绘制框架。不过,我还是想nextDrawable直接用方法从CAMetalLayer。希望这对其他人有帮助。

0 投票
1 回答
2089 浏览

ios - iOS 版 Metal 中的 GL_TRIANGLE_STRIP 等价物是什么?

尝试绘制一条三角形,如下所示:

GL_TRIANGLE_STRIP

完成了 objc.io教程,他们在其中使用两个三角形绘制了一个四边形。三角形是断开连接并单独绘制的,这意味着我需要指定 6 个顶点而不是 4 个。

有没有办法像在 OpenGL ES 中一样绘制条带而不复制顶点?

0 投票
0 回答
1194 浏览

metal - 如何在 Metal 中将 MTLTexture 转换为 CVMetalTextureRef 或 CMSampleBufferRef?

我在将 MTLTexture 转换为 CVMetalTextureRef 或 CVPixelBufferRef 时遇到了问题,我的代码是这样的:

但是 UIImageview 显示的图像不正确。完整的代码在这里

0 投票
2 回答
2623 浏览

ios - iOS - Combining SpriteKit and Metal

Is it possible to combine SpriteKit with Metal? and if it is, how could one achieve to combine metal particles and SKNodes in a physics world so that the collide with each other, what's the usual approach for this kind of requirement.

Thanks

0 投票
1 回答
589 浏览

ios - 在 Metal 中显示对象文件

我试图使用金属 api 来显示 3D 对象,我按照本教程(http://metalbyexample.com/textures-and-samplers/)但是当我尝试更改他与我的对象一起使用的对象时,它显示为一个块، 很抱歉我不能发布图片,它应该是一个脚的对象。

我可以理解该对象是否没有完全显示或任何类似的东西,但它没有任何功能,只是一个块。

对此有什么帮助吗?

0 投票
0 回答
66 浏览

3d - 从 Ray Cast 生成光栅化风格的深度缓冲区

我在我的图形管道中混合了光线投射和标准光栅化,我需要从光线投射中生成一个适当的深度缓冲区,它可以与光栅化互操作。

我知道,正如先前的回答所暗示的,我可以获取光线投射交点的世界位置,然后使用我用于光栅化的相同矩阵将其转换为剪辑空间,但在我的情况下,这将需要一个每像素矩阵乘法运算,并且为了节省宝贵的少量计算能力,我想避免这种情况。

我知道必须有一种方法可以从仅使用矢量数学的光线投射中计算出适当的深度值,但我不清楚首先生成它的数学(即透视投影的内部工作原理),因此我不知道如何在没有投影矩阵的情况下导出深度缓冲区。

0 投票
1 回答
363 浏览

ios - Metal iOS 中的 tex2Dproj 等效项

如何在 Metal 中进行硬件加速纹理投影?我找不到任何描述如何做到这一点的参考或资源。

0 投票
1 回答
1255 浏览

swift - 使用 Swift 在 Mac OS 上进行金属纹理映射

我在 Swift 中关注这些很棒的 Metal 教程:

一切都很好,直到我来到解释纹理映射的第三部分。不知何故,我的映射在某些面孔上做得非常错误。这可能有很多原因,但我对 Metal 很陌生,所以我相信这是我缺乏知识并且做错了什么。无论如何,结果是这样的:

扭曲的纹理

在这里,我试图显示两个具有四个顶点的三角形(A -> B -> C -> D 以逆时针顺序)并且不知何故第一个三角形显示了扭曲的纹理(A,B,C),而第二个看起来很好( A、C、D)。

除了Cube教程中定义的类(也显示扭曲的纹理)之外,我还创建了一个更简单的Triangle类来显示三角形的正方形图像。然而,即使对于这种非常简单的安排,纹理映射也会失败。

我没有向您展示整个代码,而是在我的项目文件夹 (zip) 中附加了一个链接,以便您可以自己下载和执行这些东西。我已经尽我所能对所有代码进行了注释,希望它对你们有意义。

在深入研究几个文件之前,我粗略猜测问题可能出在哪个文件中:

  1. 函数中的Shader.metal basic_fragment(),因为它会插值纹理的颜色以在片段中显示它,并且传递的坐标可能不正确。

  2. MetalTexture.swift 在loadTexture()函数中,因为我对如何从 NSImage 加载 CGImage 的修复可能有问题并扭曲纹理图像。

  3. 类函数中的 Node.swift defaultSampler(),因为正是这个 Metal 采样器用于插值并且可能有故障。

  4. 一切都是正确的(我怀疑),只是 Mac OS 10.11 仍处于测试状态导致问题(这会很烦人

总而言之,我为在我的代码中发现错误而感到抱歉,但我已经在这个问题上做了一个多星期了,仍然卡住了。提前谢谢了 ;)

更新#1

经过大量的试验和修改后,我设法正确地映射了纹理。为此,我遵循了一种特殊的模式。为了更容易解释,这里是角的图像以及我将它们添加到我的 Triangle 类的顺序:

顶点索引

因此,vertexArray生成的 由以下顺序的顶点组成:

现在更令人困惑的是,这里是顶点的 x、y、s 和 t 坐标:

  • A: (x: -1, y: 1, s: 0, t: 1)
  • B: (x: -1, y: -1, s: 0, t: 0)
  • C: (x: 1, y: -1, s: 0, t: 1)
  • D: (x: 1, y: 1, s: 1, t: 1)

虽然 xy 坐标没问题,但 sr 坐标CA是相同的 Oo 我很高兴我正确显示了这个简单的三角形(如下图所示),但我不知道从哪里开始调试更大的东西。

为了让它更烦人,当改变两张脸的顺序时,它说

代替

尽管信息相同,但一切都再次被错误映射。任何线索为什么家伙?

固定图像

更新#2

事实证明它仍然没有修复,尤其是在向一堆添加动画时。当旋转上面看起来很漂亮的图像时,会出现一些可怕的错误映射纹理。现在我开始担心这是否是驱动程序问题。我正在运行Nvidia卡,而不是AMD ...

文物或它是什么

0 投票
1 回答
860 浏览

ios - 如何在顶点/片段着色器(金属)中使用 3x3 2D 变换

我有一个简单的任务,但显然我仍然不明白投影在着色器中是如何工作的。我需要对纹理四边形(2 个三角形)进行 2D 透视变换,但在视觉上它看起来不正确(例如,梯形比 CPU 版本中的梯形略高或拉伸更多)。

我有这个结构:

在顶点着色器中,我做了类似的事情(texCoords是四角的像素坐标,单应性是用像素坐标计算的):

然后在片段着色器中像这样:

结果不是我所期望的。我花了几个小时在这上面,但我无法弄清楚。发泄

更新:

这些是 CPU 的代码和结果(又名预期结果):

被cpu扭曲

这些是 GPU 的代码和结果(又名错误结果):

在此处输入图像描述

原图:

原始图像

更新 2:

与应该在片段着色器中进行透视分割的普遍看法相反,如果我在顶点着色器中分割(并且三角形之间没有扭曲或接缝),我会得到相似的结果,但为什么呢?

在此处输入图像描述

更新 3:

如果出现以下情况,我会得到相同(错误)的结果:

  • 我将透视分割移动到片段着色器
  • 我只是从代码中删除了分隔符

很奇怪,看起来分水岭并没有发生。