問題タブ [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 投票する
4 に答える
1682 参照

objective-c - MetalKit アプリケーションでの入力イベントの処理

MetalKitを使った「Game」テンプレートを使って、XcodeでOS X上でアプリケーションを作成しました。keyDown や keyUp などの入力イベントを処理するにはどうすればよいですか? 追加してみました

AppDelegate と GameViewController に入れますが、キーを押しても呼び出されません。

0 投票する
0 に答える
1163 参照

ios - MTLRenderPassColorAttachmentDescriptor.clearColor がアルファ値を尊重しない

私は Metal が初めてで、別の NSView の上に Metal ビューを追加しようとしています。金属ビュー (MTKView) 内で、透明な (透明な) 背景の上に三角形をレンダリングしたいと考えています。ただし、MTKView の背景は常に単色です。これが私が試したことです:

NSView の背景色をクリア カラーに設定しています。

このビューが実際に他のビューよりも明確にレンダリングされることを確認しました (drawRect では何もレンダリングされません)。

drawRect で三角形のレンダリングを開始すると、常に単色の背景の上になります。Aではなく、背景色のRGB値を変更できました。常に単色です。

コンテンツをレンダリングする前に、透明な色でテクスチャをクリアする方法について何か提案はありますか?

ありがとうございました。

ここに画像の説明を入力

更新:私は自分の質問に答えたようで、他の人がこれを役に立つと思うように、この投稿を更新しています。

レイヤーを透明に設定するのがコツのようです。

0 投票する
0 に答える
654 参照

metal - メタル ポイント プリミティブのオーバーラップとブレンド

部分的に重なるポイント プリミティブをレンダリングしています。フラグメント シェーダーは、各 Point プリミティブの四角形の一部を透明にシェーディングします (中心が塗りつぶされた円)。他のどのポイント プリミティブとも重ならないポイント プリミティブは、期待どおりにシェーディングされます (正方形の透明な領域は背景を示します)。

このようなポイント プリミティブが別のポイント プリミティブとオーバーラップすると、予期しない動作になります。具体的には、透明な領域は、元のポイントプリミティブの不透明な色を表示しませんが、代わりにそれをクリアして背景色を表示します。

つまり、頂点 ID 番号が大きいポイント プリミティブは、頂点 ID 番号が小さいポイント プリミティブの以前にシェーディングされたフラグメントをクリアします。

ポイント プリミティブは次のようにエンコードされます。

頂点シェーダーとフラグメント シェーダーは次のようになります。

結果は次のようになります。

ここに画像の説明を入力 ここに画像の説明を入力

重なり合う透明領域のクリアを防ぎながら、背景に対する透明性を維持する方法を見つけたいと思います。

ありがとうございました。

2016 年 5 月 25 日更新:

レンダー パイプライン記述子への次の追加により、固定関数のブレンドを有効にすることができました。

そして今、物事は期待どおりに見えます:

ここに画像の説明を入力

0 投票する
1 に答える
2646 参照

ios - CVMtalTextureCacheCreateTextureFromImage は常に null を返します

MetalKit 経由で I420 (YCbCr プランナー) をレンダリングしようとしています

ほとんどの例では、Camera からの CMSampleBuffer を使用しています。

しかし、私の目標は、特定の I420 バイトを使用することです。

私はこのようなことをします:

基本的にコードは他の例とほぼ同じですが、自分でCVPixelBufferを自作しています。

CVPixelBuffer と CVMtalTexture を作成してもエラーは発生しませんでしたが、

ただし、yTexture に対しては常に null を返します。

適切な CVPixelBuffer を作成し、それを使用してレンダリングするにはどうすればよいですか?

0 投票する
1 に答える
247 参照

metal - MDLMesh に無名のデフォルト属性があるのはなぜですか?

私は発見Model I/Oしていて、それを使用して頂点を生成して球を作成したいので、MDLMeshこのクラスメソッドを使用してオブジェクトを作成しました:

次に、それがどのように機能するかを理解するために、この MDLMesh の属性を調べたいので、次のように読み取ります。

出力は次のとおりです。

属性名: position、形式 786435
属性名: normal、形式 786435
属性名: textureCoordinate、形式 786434
属性名: 、形式 0 属性名: 、形式 0
属性名: 、形式 0 属性名: 、 of形式 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 のままです。

0 投票する
1 に答える
2357 参照

ios - 金属を使用した索引付けされた図面

モデル (フォーム .OBJ) を読み込んで、MetalKit を使用して iOS の画面に描画しようとしています。問題は、モデルの代わりにランダムなポリゴンを取得することです...モデルをロードする傾向があるコードは次のとおりです(コードはraywenderlich.comのチュートリアルに基づいています:

そして、ここに私の描画方法があります:

ここに私の頂点シェーダーがあります:

そして、これがどのように見えるかです:

リンク

実際には、モデルをロードするために私が完全に作成した別のクラスがあります。問題は、インデックス作成を使用していないことです。そのため、ローポリ球体よりも複雑なモデルをロードしようとすると、GPU がクラッシュします... とにかく、インデックス作成を使用するように変更しようとしたところ、同じ結果..テスト用にハードコードされたインデックスを追加したところ、本当に奇妙な結果が得られました。3 つのインデックスがあるときは三角形を描き、さらに 3 つ追加すると同じ三角形を描き、さらに 3 つの頂点の後に 2 つの三角形を描きました...

編集: これが私のVertex構造です:

0 投票する
1 に答える
1425 参照

metal - 回転、平行移動、およびデフォルトのカメラ位置

でテンプレートのセットアップをいじっているだけMTKViewです。そして、私は次のことを理解しようとしています:

  1. カメラのデフォルトの位置。

  2. MDLMeshとを使用してプリミティブを作成するときのデフォルトの場所MTKMesh

  3. 回転に平行移動が含まれるのはなぜですか。

関連コード:

上記のコードは_update、テンプレートによるメソッドからのものです。明らかに、カメラの代わりにモデルを回転させようとしています。しかし、私を困惑させているのは、翻訳も必要であるという事実です。「常に回転するから」などの主張を読んだことがあります(0, 0, 0)。しかし(0, 0, 0)、オブジェクトが別の場所に配置されている場合、なぜでしょうか? また、次のように変更すると、カメラは通常の負の z 軸ではなく、正の z 軸 (質問 1 ) を見ているように見えます。

に:

オブジェクトがカメラの後ろにあるように見えるため、画面には何も表示されません。これは、カメラが正の z 軸を見ていることを意味します。

(すべてゼロ)を設定すると、オブジェクトは期待どおりにmatrix_from_translation(0.0f, 0.0f, 0.0f)y 軸 (質問 3 ) 上で回転しません。

MDLMeshandMTKMeshがデフォルトで配置されている場所を見つけようとしましたが(質問 2 )、その位置を記録するプロパティが見つかりませんでした。以下は、同じくテンプレートによる、プリミティブの作成方法です。

上記の方法で生成された位置を知らなければ、回転と移動がどのように機能するか、Metal のカメラのデフォルトの位置を理解するのに役立ちます。

ありがとう。