4

最近、Swift で Metal フレームワークを使用する方法を学ぶことにしました。いくつかのチュートリアルを読み、ビデオを見て、いくつかのことを行い、最終的には、デプス テストを使用して見栄えを良くする必要がある部分に到達しました。

私は以前にそのような低レベルのグラフィックス プログラミングを行ったことがなかったので、デプス テストがどのように機能するか、および CAMetalLayer と Metal を使用してそれを実装する方法について、インターネット全体を見回しました。

しかし、私が見つけた深度テストの例はすべて Open GL を使用して行われており、Metal ではそのような機能を見つけることができませんでした。

Metal と Swift を使用して CAMetalLayer で深度テストを実装するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

1

この Stackoverflow の投稿の質問には、Obj-C で書かれていますが、回答が含まれています。ただ、基本的にDong Fengさんが指摘しているように、深度テクスチャは自分で作成・管理する必要があります。

これは、深度テクスチャを作成する方法の Swift 4 スニペットです。

func buildDepthTexture(_ device: MTLDevice, _ size: CGSize) -> MTLTexture {
    let desc = MTLTextureDescriptor.texture2DDescriptor(
        pixelFormat: .depth32Float_stencil8,
        width: Int(size.width), height: Int(size.height), mipmapped: false)
    desc.storageMode = .private
    desc.usage = .renderTarget
    return device.makeTexture(descriptor: desc)!
}

そして、ここにあなたがそれをに添付する必要がある方法がありますMTLRenderPassDescriptor

let renderPassDesc = MTLRenderPassDescriptor()

let depthAttachment = renderPassDesc.depthAttachment!
// depthTexture is created using the above function
depthAttachment.texture = depthTexture
depthAttachment.clearDepth = 1.0
depthAttachment.storeAction = .dontCare

// Maybe set up color attachment, etc.
于 2019-12-11T13:10:31.090 に答える