9

Metal で描いている線の幅を設定したいと思います。ここで説明されているように、point_size でポイントのサイズを設定できます。

https://developer.apple.com/library/prerelease/ios/documentation/Metal/Reference/MTLRenderCommandEncoder_Ref/index.html

しかし、それが線でどのように機能するかはわかりません。

4

2 に答える 2

7

短い答えは、Metal のポイント サイズと同じ方法で線幅を制御する方法がないということです。OpenGL グラフィックス API でも、これを行う関数 (以前は gllinewidth 関数として存在していた) は非推奨になりました。

オプションは、2 つの三角形で、四角形 (ボックス) として線を描画することです。これにより、線の幅を制御できます。

何らかの特定の理由でライン プリミティブ自体に固執したい場合は、同等の OpenGL の質問が StackOverflow ですでに行われています。シェーダーは、Metal shading API に簡単に変換できます。

于 2015-02-05T18:45:02.657 に答える
5

2 つの長方形で 2D ボックスを描画する代わりに線を使用することに固執している場合は、複数の線を並べて描画できます。drawPrimitives1回の呼び出しで同じ2つの頂点を複数回描画することでそれを行うことができますinstanceCount。厚さをシミュレートするために を増やしてから、頂点シェーダー関数vertex_idでモジュラス操作または他のタイプのロジックを使用して、太さをシミュレートするライン。これはおそらく、フラグメント シェーダーで凝ったことをしようとするよりもはるかに簡単です。

複数の線を描画している場合は、instanceCount必要な太さで乗算し、頂点シェーダー関数ロジックを調整して、これらの追加の線を互いに並べて配置します。

私はこれを試してみましたが、これはかなり面倒なプロセスであることがわかりました。余分な線を正しく太くするには、追加の計算が必要です。たとえば、水平線を描いていて、太さを 2 倍に増やしたい場合は、y の値を変更する必要がありますが、垂直線の場合は x を変更する必要があります。斜めに描くとさらに複雑になります。また、図形を描画しようとすると、長さと幅を一致させようとすると問題が発生します。

三角形を2つ描いて長方形を作り、線を偽造する方がはるかに良いと思います。数学ははるかに簡単で理解しやすいでしょう。

ジオメトリでは、ユークリッドの線には幅がなく、長さしかありません。描画中に得られる幅は、単に表現のためのものです。したがって、ベクトルを表示したり、縮尺を確認するためのグリッドを作成したりするなど、デバッグや開発には線が適していると思いますが、線をスタイルしてユーザーに表示しようとする場合は、線は必要ありません。その場合、それは仕事に適したツールではありません。

于 2016-09-16T12:07:34.717 に答える