【问题标题】:how to create 2nd view in/over mtkview如何在 mtkview 中/上方创建第二个视图
【发布时间】:2016-11-08 18:50:28
【问题描述】:

我正在学习 Swift、Metal/MetalKit 来创建一个工程应用程序。由于视力不佳(我迷失在 xcode 中),我不使用 Interface Builder。 在 27" iMac 上运行 OSX 10.11。

我有一个正在运行的 mtkview 显示 3D 图形,但需要在顶部(角落)添加另一个视图以显示视图方向。

我在 Linux、gtkmm 和 mesa 3d 中有第二个 opengl 视图,但我找不到任何关于如何在 metal 中添加第二个视图的文档。

我尝试在我的程序中添加第二个 mtkview,但没有任何反应(我认为它没有被识别)。

最好的方法是什么?

  1. 在现有视图之上添加第二个 mtkview? (如果是,如何)
  2. 根据现有视图渲染过程渲染第二个视图?
  3. 其他方法?

有没有人知道如何做到这一点的任何信息或示例?

【问题讨论】:

  • 你能分享你用来创建和添加第二个视图的代码吗?与往常一样,您需要显式设置视图的框架并将其添加为主视图的子视图或同级视图。我希望MTKViews 能够像通用的NSViews 一样组合在一起。如果第二个视图没有显示,您应该能够在调试器中检查视图层次结构和视图的属性。
  • 您好,我稍微编辑了您的问题,以便正确显示末尾的列表,并且您的一些短语从新段落开始。
  • 您好,感谢您的回复。我花了一段时间来清理我的代码,所以它不会混淆这个问题。我的代码基于 Marius 的教程(谢谢!Marius)。我一直在玩它。
  • 嗨,您可能已经注意到,我在弄清楚如何将我的代码提供给您时遇到了一些麻烦……我仍在努力。请耐心等待......
  • 再次嗨,我不知道如何分享我的代码,但我有一个指向我基于它的教程代码的链接:[link]github.com/Swiftor/Metal/commit/…

标签: macos metal


【解决方案1】:

对此有一个非常简单的答案。 Metal 使用所谓的视图端口来指定应该绘制视图的哪个部分。视口之外的一切都保持原样。你可以这样使用它:

// Draw the full view here

let topLeft = MTLViewport(originX: 10, 
                          originY: 10, 
                          width: size.width / 3, 
                          height: size.height / 3, 
                          znear: 0, 
                          zfar: 1)

renderEncoder.setViewport(topLeft)

// Draw the top left view here

当然,您不应该总是计算topLeft 视图端口,因为它仅在视图大小发生变化时才会发生变化,因此将其放入mtkView:drawableSizeWillChange: 方法中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多