スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:--:-- : スポンサー広告 ]

【Unity】 GLを使ってデバッグ用のライン描画

GLを使ってのライン描画について。

Gameビューにライン描画を行う方法。

Debug.DrawLineはSceneビューにしか表示されないので、Gameビューに描こうと思ったら
GLを使う必要がある。

さらに、実機上では線の色の変更をするにはマテリアルを割り当てる必要があるので注意。
GL.Colorはエディタ上でのみ反映される。


3D空間にライン描画するコードはこんな感じ。
MonoBehaviourのOnRenderObjectメソッド内で行う。

    void Awake()
{
m_LineMaterial = createLineMaterial( Color.white );
}

void OnRenderObject()
{
Vector3 vPos = Vector3.zero;
Quaternion qRot = Quaternion.identity;
Matrix4x4 mtx = Matrix4x4.TRS( vPos, qRot, Vector3.one );

GL.PushMatrix();
{
GL.MultMatrix( mtx );

m_LineMaterial.color = Color.yellow;
m_LineMaterial.SetPass( 0 );

GL.Begin( GL.LINES );
{
GL.Vertex( new Vector3(0,0,0) );
GL.Vertex( new Vector3(0,0,10) );
}
GL.End();

// change color
m_LineMaterial.color = Color.cyan;
m_LineMaterial.SetPass( 0 );

GL.Begin( GL.LINES );
{
GL.Vertex( new Vector3(2,0,0) );
GL.Vertex( new Vector3(2,0,10) );
}
GL.End();
}
GL.PopMatrix();
}

private Material createLineMaterial( Color color )
{
return new Material(
"Shader \"Lines/Background\" { Properties { _Color (\"Main Color\", Color) = ("+color.r+","+color.g+","+color.b+","+color.a+") } SubShader { Pass { ZWrite on Blend SrcAlpha OneMinusSrcAlpha Colormask RGBA Lighting Off Offset 1, 1 Color[_Color] }}}"
);
}

// line material
private Material m_LineMaterial;


マテリアルの生成はシェーダ用のコードの文字列をそのまま引数としても出来ることに
最近気付いて驚いたが、いちいちファイルを用意するまでも無いレベルなら
こういうやり方もあるということで。(ホントは用意したほうがいいけど...)


色の変更は Gl.Colors でやっていたところを

マテリアル.color = 設定したい色
マテリアル.SetPass( パスID )


に置き換えている。

こうすると実機端末でもきちんと色の変更が反映される。


2Dのスクリーン空間に描画する場合のコードはこんな感じ。

    void OnRenderObject()
{
GL.PushMatrix();
{
GL.LoadOrtho();

// change color
m_LineMaterial.color = Color.red;
m_LineMaterial.SetPass( 0 );

GL.Begin( GL.LINES );
{
GL.Vertex( new Vector3(0,0,0) );
GL.Vertex( new Vector3(1,1,0) );
}
GL.End();
}
GL.PopMatrix();
}

左下が(0,0)、右上が(1,1)なので座標系に注意。

あと、OnRenderObjectは全てのカメラからコールされるメソッドなので、
カメラがシーン上に複数ある場合は特定のカメラだけから呼ばれるようにしないと
ラインが重複して描画されるのでこれにも注意。

[ 2014年01月13日 11:52:04 : Unity ]

カレンダー

プルダウン 降順 昇順 年別

11月 | 2018年12月 | 01月
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -


全記事表示リンク

全ての記事を表示する

検索フォーム

リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。