1

私は宇宙を舞台にした 3D ゲームに取り組んでいます。現在、惑星の軌道線を追加中です。
理想的には、カメラからの線の距離に関係なく、1 ピクセル幅で軌道線を描きたいと思います。誰もそれを行う方法を知っていますか?
現在、惑星の軌道に合わせてスケーリングおよび回転された平面メッシュを使用しています。フラグメント シェーダーでは、U 座標と V 座標を使用して、特定のピクセルにピクセルを描画する必要があるかどうかを判断します。

// subtract 0.5 from UV coordintes of this pixel
"sub ft0, v1, fc4 \n" + // fc4 is a vector of 0.5 values
// double it, so values range from -1...1
"mul ft0, ft0, fc2 \n" + // fc2 is a vector of 2 values
// square x component
"mul ft1.x, ft0.x, ft0,x \n" +
// square y component
"mul ft1.y, ft0.y, ft0.y \n" +
// set others to 0
"mov ft1.w, fc0.w \n" + // fc0 is a vector of 0s
"mov ft1.z, fc0.w \n" +
// add and square root to get distance from centre...
"add ft1.xyzw, ft1.xxxx, ft1.yyyy \n" +
"sqt ft1, ft1 \n" +

したがって、ft1 は平面メッシュの中心から現在のフラグメントまでの距離になります。sge および slt op コードを使用してこの値を '1' と比較できますが、結果の線を常に 1 ピクセル幅で描画するにはどうすればよいですか? 私が得ている結果は、遠近法によって歪んでおり、カメラが平面に近い場合にも歪んでいます。
現在のフラグメントのカメラからの距離で幅をスケーリングしようとしましたが、それは醜い回避策のようです-カメラが軌道の平面と同じ高さになった場合でも、「平坦化」の影響を受けます。
解決策は何ですか?確かに1ピクセル幅の線を遠近法なしで描くことは可能です...

4

0 に答える 0