(B) GL simple draw

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.Color(Color.red); GL.Vertex3(0, triangleSize, 0); GL.End(); } 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(); } 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(); } 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(); } } 

Guess you like

Origin www.cnblogs.com/llstart-new0201/p/12315710.html