Unity3D开发之GL画线

本文介绍了一种在Unity中为面片添加固定宽度边缘线的方法,通过使用OpenGL直接绘制线条,解决了面片拉伸时边缘线变粗或变细的问题。

最近一直在专心炒股,博客也没时间整。虽然很耗费精力,但是确实有意思。炒股不仅是对大盘形势的判断,有时候更是对自己全身心的考验。还是新鲜的小韭菜,还有很长的路要走。加油奥利给!

最近有个需求就是要给一个面片加边缘线。之前使用的边线贴图盖上面片上面,可是当面片拉伸时,边缘线也跟着拉伸,导致拉伸边缘线变粗或者变细。因为都是规则的方形,所以我使用gl自己画一个边缘线。效果如下:

最后一个是未添加外线的面片。代码贴在下面:

void OnRenderObject()
        {
            lineMaterial.SetColor("_Color", color);
            lineMaterial.SetPass(0);

            Vector3 v1=new Vector3(-size.x/2, size.y/2,0);
            Vector3 v2 = new Vector3(size.x / 2, size.y / 2, 0);
            Vector3 v3 = new Vector3(size.x / 2, -size.y / 2, 0);
            Vector3 v4 = new Vector3(-size.x / 2, -size.y / 2, 0);

            GL.Begin(GL.QUADS);
            GL.Color(color);
            GL.Vertex(transform.TransformPoint(v1));
            GL.Vertex(transform.TransformPoint(v1) +new Vector3(-width,0, +width));
            GL.Vertex(transform.TransformPoint(v2) +new Vector3(width, 0,width));
            GL.Vertex(transform.TransformPoint(v2));

            GL.Color(color);
            GL.Vertex(transform.TransformPoint(v2));
            GL.Vertex(transform.TransformPoint(v2)+new Vector3(width,0, width));
            GL.Vertex(transform.TransformPoint(v3) + new Vector3(width, 0, -width));
            GL.Vertex(transform.TransformPoint(v3));

            GL.Color(color);
            GL.Vertex(transform.TransformPoint(v3));
            GL.Vertex(transform.TransformPoint(v3) - new Vector3(-width, 0, +width));
            GL.Vertex(transform.TransformPoint(v4) - new Vector3(width, 0, +width));
            GL.Vertex(transform.TransformPoint(v4));


            GL.Color(color);
            GL.Vertex(transform.TransformPoint(v4));
            GL.Vertex(transform.TransformPoint(v4) - new Vector3(width, 0, width));
            GL.Vertex(transform.TransformPoint(v1)- new Vector3(width, 0, -width));
            GL.Vertex(transform.TransformPoint(v1));
            GL.End();
        }

注意:GL.Vertex(vector3 v)传入的是世界坐标。