zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    初识 Rabbitmq
    Lambda表达式(C语言-gcc编译器)
    二叉树转换成双向链表
    进程的内存分布
    Linux shell之数组
    Ubuntu 使用Gparted工具扩大第一分区方法步骤
    Android源码编译出错解决办法
    IIC总线解析
    VirtualBox Ubuntu虚拟机串口编程
    ubuntu虚拟机上解决克隆github代码慢的方法
  • 原文地址:https://www.cnblogs.com/DazeJiang/p/14366739.html
Copyright © 2011-2022 走看看