1 Introduction
In GL introduction has been using GL method to do a detailed explanation, this article is a simple application examples of GL method.
2. Draw simple graphics
The basic parameters of variables are as follows:
public int circleCount = 6;
public int circleRadius = 3; public int triangleSize = 2; public int quadSize = 2;
2.1 Drawing ring
Based GL.LINES generated by drawing line circle. code show as below:
private void DrawCircle() { float angleDelta = 2 * Mathf.PI / circleCount; GL.Begin(GL.LINES); GL.Color(Color.red); for (int i = 0; i < circleCount; i++) { float angle = angleDelta * i; float angleNext = angle + angleDelta; GL.Vertex3(Mathf.Cos(angle) * circleRadius, Mathf.Sin(angle) * circleRadius, 0); GL.Vertex3(Mathf.Cos(angleNext) * circleRadius, Mathf.Sin(angleNext) * circleRadius, 0); } GL.End(); }
2.2 Draw a triangle
Drawing a triangle plane
private void DrawTriangle() { GL.Begin(GL.TRIANGLES); GL.Color(Color.green); GL.Vertex3(-triangleSize, -triangleSize, 0); GL.Color(Color.black); GL.Vertex3(triangleSize, -triangleSize, 0); GL.Color(Color.red); GL.Vertex3(0, triangleSize, 0); GL.End(); }
2.3 Drawing quadrangular
Draw quadrilateral plane
private void DrawQuad()
{
GL.Begin(GL.QUADS); GL.Color(Color.blue); GL.Vertex3(-quadSize, -quadSize, 0); GL.Vertex3(quadSize, -quadSize, 0); GL.Vertex3(quadSize, quadSize, 0); GL.Vertex3(-quadSize, quadSize, 0); GL.End(); }
2.4 Drawing the circular face
In line drawn through the 2.1 circular ring, this section plane drawn through the triangle circle
private void DrawCircleSurface()
{
float angleDelta = 2 * Mathf.PI / circleCount; GL.Begin(GL.TRIANGLES); GL.Color(Color.yellow); for (int i = 0; i < circleCount; i++) { float angle = angleDelta * i; float angleNext = angle + angleDelta; GL.Vertex3(0, 0, 0); GL.Vertex3(Mathf.Cos(angle) * circleRadius, Mathf.Sin(angle) * circleRadius, 0); GL.Vertex3(Mathf.Cos(angleNext) * circleRadius, Mathf.Sin(angleNext) * circleRadius, 0); } GL.End(); }
2.5 Draw the cube
Draw the cube by Quad
private void DrawCube()
{
GL.Begin(GL.QUADS); GL.Color(Color.white); GL.Vertex3(-quadSize, -quadSize, -quadSize); GL.Vertex3(quadSize, -quadSize, -quadSize); GL.Vertex3(quadSize, quadSize, -quadSize); GL.Vertex3(-quadSize, quadSize, -quadSize); GL.Vertex3(-quadSize, -quadSize, quadSize); GL.Vertex3(quadSize, -quadSize, quadSize); GL.Vertex3(quadSize, quadSize, quadSize); GL.Vertex3(-quadSize, quadSize, quadSize); GL.Vertex3(quadSize, -quadSize, -quadSize); GL.Vertex3(quadSize, -quadSize, quadSize); GL.Vertex3(quadSize, quadSize, quadSize); GL.Vertex3(quadSize, quadSize, -quadSize); GL.Vertex3(-quadSize, -quadSize, -quadSize); GL.Vertex3(-quadSize, -quadSize, quadSize); GL.Vertex3(-quadSize, quadSize, quadSize); GL.Vertex3(-quadSize, quadSize, -quadSize); GL.Vertex3(-quadSize, -quadSize, -quadSize); GL.Vertex3(quadSize, -quadSize, quadSize); GL.Vertex3(quadSize, -quadSize, quadSize); GL.Vertex3(-quadSize, -quadSize, quadSize); GL.Vertex3(-quadSize, quadSize, -quadSize); GL.Vertex3(quadSize, quadSize, -quadSize); GL.Vertex3(quadSize, quadSize, quadSize); GL.Vertex3(-quadSize, quadSize, quadSize); GL.End(); }
3. The complete code
using System.Collections;
using System.Collections.Generic; using UnityEngine; public class Graphics02GLDrawings : MonoBehaviour { public enum DrawingType { DRAW_CIRCLE, DRAW_TRIANGLE, DRAW_QUAD, DRAW_CIRCLE_SURFACE, DRAW_CUBE } public DrawingType type = DrawingType.DRAW_CIRCLE; public int circleCount = 6; public int circleRadius = 3; public int triangleSize = 2; public int quadSize = 2; private Material glMat; private void SetMaterialPass() { if (glMat == null) { glMat = new Material(Shader.Find("Hidden/Internal-Colored")); } glMat.SetPass(0); } private void OnRenderObject() { SetMaterialPass(); switch(type) { case DrawingType.DRAW_CIRCLE: DrawCircle(); break; case DrawingType.DRAW_TRIANGLE: DrawTriangle(); break; case DrawingType.DRAW_QUAD: DrawQuad(); break; case DrawingType.DRAW_CIRCLE_SURFACE: DrawCircleSurface(); break; case DrawingType.DRAW_CUBE: DrawCube(); break; } } private void DrawCircle() { float angleDelta = 2 * Mathf.PI / circleCount; GL.Begin(GL.LINES); GL.Color(Color.red); for (int i = 0; i < circleCount; i++) { float angle = angleDelta * i; float angleNext = angle + angleDelta; GL.Vertex3(Mathf.Cos(angle) * circleRadius, Mathf.Sin(angle) * circleRadius, 0); GL.Vertex3(Mathf.Cos(angleNext) * circleRadius, Mathf.Sin(angleNext) * circleRadius, 0); } GL.End(); } private void DrawTriangle() { GL.Begin(GL.TRIANGLES); GL.Color(Color.green); GL.Vertex3(-triangleSize, -triangleSize, 0); GL.Color(Color.black); GL.Vertex3(triangleSize, -triangleSize, 0); GL