Unity에서 GL을 사용하여 공간에 선을 긋는 방법

9212 단어 Unity
홀로렌즈에서 회화 애플리케이션을 만들 때 선을 그리는 방법을 찾아봤기 때문에 간단하게 요약해 보겠습니다.

개시하다


그림을 공간에 응용하여 선을 그리는 데는 몇 가지 방법이 있다.
-LineRenderer 사용
-GL을 사용하여 1px의 선을 굵게 그립니다.
-GL 사용, 다각형 선 그리기

Line Renderer 사용 방법


Line Renderer를 사용하여 간단하게 선을 그릴 수 있습니다.
lineRenderer.positionCount = positions.Length;
lineRenderer.SetPositions(positions);
라인 렌더는 선 하나만 그릴 수 있기 때문에 드로잉 애플리케이션처럼 선을 많이 그리면 라인 렌더가 많이 생성되기 때문에 좀...

1px 굵기의 선을 GL로 그리는 방법


Unity에서 GL을 사용할 수 있으므로 이걸로 선을 그릴 수 있습니다.
https://docs.unity3d.com/ScriptReference/GL.html
private void OnRenderObject()
{
    // Materialの初期化と設定、詳しくは↑のUnityのScriptReferenceを参照。
    CreateLineMaterial();

    lineMaterial.SetPass(0);

    // GL.PushMatrix()~GL.PopMatrix()の間に行われた、行列マトリクスの変更が外に漏れないようにPush&Pop。おまじない、おまじない
    GL.PushMatrix();

    // 複数の線を描画する
    foreach (var stroke in strokeSet)
    {
        GL.Begin(GL.LINE_STRIP);
        for (int i = 0; i < stroke.Nodes.Count; i++)
        {
            GL.Color(stroke.Nodes[i].color);
            GL.Vertex(stroke.Nodes[i].position);
        }
        GL.End();
    }
    GL.PopMatrix();
}
MonoBehaviour의 클래스를 상속하는 On RenderObject()에서 그리기 처리를 실행하여 프레임마다 그리는 동안 처리를 호출합니다.
프레임마다 호출되기 때문에 무거운 처리를 피하는 것이 좋다.
여러 가지 처리를 했지만 주로 GL이었다.Begin(GL.LINE_STRIP)~GL.끝.
GL.선을 Begin(GLINE STRIP)으로 그릴 GL을 지정합니다.Begin~GL.끝에서 여러 교점 정보를 지정하여 지정된 교점을 연결하는 선을 그립니다.
정점의 지정은 GL입니다.Color에서 정점 색상, GLVertex를 사용하여 교점 좌표를 지정합니다.

GL.LINE_STRIP 이외에 선과 다각형을 그리는 방법도 있으니 관심 있으면'OpenGL Priimitives'로 검색하면 된다.
그리고 GL.LINE_STRIP로 선을 그릴 때 선의 굵기는 1px로 고정됩니다.하지만 회화 응용으로 굵기를 바꾸고 싶어요...

GL로 굵은 선을 그리는 방법.


선의 굵기를 지정하지 못하면 얇은 판 폴리에틸렌을 연결해 선처럼 다각형을 그리면 되잖아요.
그래서 컬러테이프로 그림을 그리는 느낌이 든다.
private void OnRenderObject()
{
    // Materialの初期化と設定
    CreateLineMaterial();

    lineMaterial.SetPass(0);

    GL.PushMatrix();

    // 複数の線を描画する
    foreach (var stroke in strokeSet)
    {
        GL.Begin(GL.TRIANGLE_STRIP);
        for (int i = 0; i < stroke.Nodes.Count; i++)
        {
            var node = stroke.Nodes[i];
            var next = stroke.Nodes[i + 1];

            // 線の進行方向(dir)から少し左右(offset)に散らして、TRIANGLE_STRIPで描画
            // することで、任意の幅の線(ポリゴン)を描画する。
            var dir = next.position - node.position;
            var offset = Vector3.Cross(node.normal, dir).normalized * lineWidth;

            GL.Color(node.color);
            GL.Vertex(node.position + offset);
            GL.Vertex(node.position - offset);
        }
        GL.End();
    }
    GL.PopMatrix();
}
이거 GL이야.LINE_STRIP이 아니라 GL입니다.TRIANGLE_STRIP을 GL에 갖다 놓으세요.다각형을 그릴 Begin으로 지정합니다.
아래와 같이 원래의 선은 파란색 선으로 정점 좌표(node.position)부터 위아래로 오프셋의 폭을 남기고 다각형을 그립니다.

지금은 오프셋 방향이지만 이번에는 선을 그은 곳을 보면 폭이 넓어 보이며 위아래 좌우로 돌려보면 비스듬해 보인다.
이를 위해서는 선의 정점 좌표뿐만 아니라 법선 정보도 필요하기 때문에 정점 좌표와 같이 기록하고 이용한다.

최후


유니티 선을 그릴 경우 라인 렌더러 이외에도 GL을 사용할 수 있다.머티리얼즈도 사용하기 때문에 쉐더로도 효과를 볼 수 있다.
다만, 여러 가지 복잡한 일을 하다 보면 번거로울 수 있으니 라인 렌더러를 솔직하게 사용하는 게 좋다.

좋은 웹페이지 즐겨찾기