• unity在Game窗口绘制网格球


    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class ShowSphereColider : MonoBehaviour
    {
        //画线用的材质球
        Material lineMat;
        private float subdivide =305.7f; //细分数
        void OnEnable()
        {
            if (lineMat == null)
            {
                lineMat = Resources.Load<Material>("Materials/LineMat");
            }
            
        }
        void OnRenderObject()
        {
            SphereCollider sphereCollider = GetComponent<SphereCollider>();
            if (!sphereCollider.enabled||sphereCollider==null)
            {
                return;
            }
            Vector3 center = sphereCollider.center;
            float radius = sphereCollider.radius;
            lineMat.SetPass(0);
            GL.Begin(GL.LINES);
            GL.Color(Color.green);
            float step = 1.0f / subdivide ;
            for (float i=0; i < 1; i+=step)
            {
                
                Vector3 p1 = GraphLib.Circle(i, radius);
                Vector3 p = new Vector3(p1.x+center.x, p1.y+center.y, p1.z+center.z);
                p=transform.TransformPoint(p);
                GL.Vertex(p);
              
            }
            for (float i = step; i < 1.0f+step; i += step)
            {
    
                Vector3 p1 = GraphLib.Circle(i, radius);
                Vector3 p = new Vector3(p1.x + center.x, p1.y + center.y, p1.z + center.z);
                p = transform.TransformPoint(p);
                GL.Vertex(p);
    
            }
            GL.End();
            GL.Begin(GL.LINES);
            GL.Color(Color.green);
            for (float i = 0; i < 1; i += step)
            {
                Vector3 p1 = GraphLib.Circle(i, radius);
                Vector3 p = new Vector3(p1.x + center.x, p1.z + center.y, p1.y + center.z);
                p = transform.TransformPoint(p);
                GL.Vertex(p);
            }
            for (float i = step; i < 1.0f+step; i += step)
            {
                Vector3 p1 = GraphLib.Circle(i, radius);
                Vector3 p = new Vector3(p1.x + center.x, p1.z + center.y, p1.y + center.z);
                p = transform.TransformPoint(p);
                GL.Vertex(p);
            }
            GL.End();
            GL.Begin(GL.LINES);
            GL.Color(Color.green);
            for (float i = 0; i <1.0f; i += step)
            {
                Vector3 p1 = GraphLib.Circle(i, radius);
                Vector3 p = new Vector3(p1.y + center.x, p1.x + center.y, p1.z + center.z);
                p = transform.TransformPoint(p);
                GL.Vertex(p);
            }
            for (float i = step; i < 1.0f+step; i += step)
            {
                Vector3 p1 = GraphLib.Circle(i, radius);
                Vector3 p = new Vector3(p1.y + center.x, p1.x + center.y, p1.z + center.z);
                p = transform.TransformPoint(p);
                GL.Vertex(p);
            }
            GL.End();
        }
    
    }
        //s角度  0-1之间  r:半径
        public static Vector3 Circle(float s,float r)
        {
            Vector3 p;
            p.x =r* Mathf.Cos(2*Mathf.PI * s);
            p.y = 0;
            p.z =r* Mathf.Sin(2*Mathf.PI * s);
            return p;
        }
  • 相关阅读:
    母牛的故事
    python 实现计算数独
    java程序计算数独游戏
    《深入理解Java虚拟机》笔记7
    安装red5 1.0.1版本Java_home不能用Java7
    计算流图中的循环集合
    《深入理解Java虚拟机》笔记5
    《深入理解Java虚拟机》笔记4
    n的阶乘-编程2.md
    爬楼梯问题-斐波那契序列的应用.md
  • 原文地址:https://www.cnblogs.com/DazeJiang/p/14366739.html
Copyright © 2020-2023  润新知