「MonoGameで直線を描画する」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「MonoGameに限らずMetalVulkanWebGLもそうだが最近は何でもかんでもシェーダーでやる風潮だ。たかだか直線を引く…」)
 
1行目: 1行目:
 
[[MonoGame]]に限らず[[Metal]]も[[Vulkan]]も[[WebGL]]もそうだが最近は何でもかんでも[[シェーダー]]でやる風潮だ。たかだか直線を引くだけでも[[シェーダー]]を叩けとか面倒くさすぎだろ。
 
[[MonoGame]]に限らず[[Metal]]も[[Vulkan]]も[[WebGL]]もそうだが最近は何でもかんでも[[シェーダー]]でやる風潮だ。たかだか直線を引くだけでも[[シェーダー]]を叩けとか面倒くさすぎだろ。
  
== スプライトを引き伸ばす ==
+
==スプライトを引き伸ばす==
[[MonoGame]]には昔ながらの「[[スプライト]]」の概念があるので「1[[ピクセル]]のスプライト(1ピクセルの[[テクスチャ]])を作って引き伸ばす」という手法が使える。
+
[[MonoGame]]には昔ながらの「[[スプライト]]」の概念があるので「1[[ピクセル]]のスプライト(1ピクセルの[[テクスチャ]])を作って、引き伸ばして、回転させる」という手法が使える。
 
<source>
 
<source>
 
public static void DrawLine(this SpriteBatch spriteBatch, Vector2 point1, Vector2 point2, Color color, flaot thickness = 1)
 
public static void DrawLine(this SpriteBatch spriteBatch, Vector2 point1, Vector2 point2, Color color, flaot thickness = 1)
28行目: 28行目:
 
</source>
 
</source>
  
== 関連項目 ==
+
==関連項目==
* [[MonoGame]]
+
 
 +
*[[MonoGame]]
  
 
[[category: MonoGame]]
 
[[category: MonoGame]]

2019年7月11日 (木) 05:05時点における版

MonoGameに限らずMetalVulkanWebGLもそうだが最近は何でもかんでもシェーダーでやる風潮だ。たかだか直線を引くだけでもシェーダーを叩けとか面倒くさすぎだろ。

スプライトを引き伸ばす

MonoGameには昔ながらの「スプライト」の概念があるので「1ピクセルのスプライト(1ピクセルのテクスチャ)を作って、引き伸ばして、回転させる」という手法が使える。

public static void DrawLine(this SpriteBatch spriteBatch, Vector2 point1, Vector2 point2, Color color, flaot thickness = 1)
{
    // 1ピクセルのテクスチャを用意しておく
    var pixel = new Texture2D(spriteBatch.GraphicsDevice, 1, 1, false, SurfaceFormat.Color);
    pixel.SetData(new[] { Color.White });

    // 2点間の距離と角度を求める
    var length =  = Vector2.Distance(point1, point2);
    var angle = (float)Math.Atan2(point2.Y - point1.Y, point2.X - point1.X);

    // 描画する
    spriteBatch.Draw(
        texture: pixel,
        position: point,
        sourceRectangle: null,
        color: color,
        rotation: angle,
        origin: Vector2.Zero,
        scale: new Vector2(length, thickness),
        effect: SpriteEffects.None,
        layerDepth: 0); 
}

関連項目