Unity下GL没有画圆的函数,只能自己来了。

如果能帮到大家,我也很高兴。

虽然没有画圆的函数,但是能画直线,利用这一点,配合微积分什么的,就可以画出来了。反正就是花很多连在一起的直线,每条直线足够短的时候,就足够圆了

  1. void DrawCircle(float x, float y, float z, float r, float accuracy)
  2. {
  3. GL.PushMatrix ();
  4. //绘制2D图像
  5. GL.LoadOrtho ();
  6.  
  7. float stride = r * accuracy;
  8. float size = / accuracy;
  9. float x1 = x, x2 = x, y1 = , y2 = ;
  10. float x3 = x, x4 = x, y3 = , y4 = ;
  11.  
  12. double squareDe;
  13. squareDe = r * r - Math.Pow (x - x1, );
  14. squareDe = squareDe > ? squareDe : ;
  15. y1 = (float)(y + Math.Sqrt (squareDe));
  16. squareDe = r * r - Math.Pow (x - x1, );
  17. squareDe = squareDe > ? squareDe : ;
  18. y2 = (float)(y - Math.Sqrt (squareDe));
  19. for (int i = ; i < size; i++) {
  20. x3 = x1 + stride;
  21. x4 = x2 - stride;
  22. squareDe = r * r - Math.Pow (x - x3, );
  23. squareDe = squareDe > ? squareDe : ;
  24. y3 = (float)(y + Math.Sqrt (squareDe));
  25. squareDe = r * r - Math.Pow (x - x4, );
  26. squareDe = squareDe > ? squareDe : ;
  27. y4 = (float)(y - Math.Sqrt (squareDe));
  28.  
  29. //绘制线段
  30. GL.Begin (GL.LINES);
  31. GL.Color (Color.blue);
  32. GL.Vertex (new Vector3 (x1 / Screen.width, y1 / Screen.height, z));
  33. GL.Vertex (new Vector3 (x3 / Screen.width, y3 / Screen.height, z));
  34. GL.End ();
  35. GL.Begin (GL.LINES);
  36. GL.Color (Color.blue);
  37. GL.Vertex (new Vector3 (x2 / Screen.width, y1 / Screen.height, z));
  38. GL.Vertex (new Vector3 (x4 / Screen.width, y3 / Screen.height, z));
  39. GL.End ();
  40. GL.Begin (GL.LINES);
  41. GL.Color (Color.blue);
  42. GL.Vertex (new Vector3 (x1 / Screen.width, y2 / Screen.height, z));
  43. GL.Vertex (new Vector3 (x3 / Screen.width, y4 / Screen.height, z));
  44. GL.End ();
  45. GL.Begin (GL.LINES);
  46. GL.Color (Color.blue);
  47. GL.Vertex (new Vector3 (x2 / Screen.width, y2 / Screen.height, z));
  48. GL.Vertex (new Vector3 (x4 / Screen.width, y4 / Screen.height, z));
  49. GL.End ();
  50.  
  51. x1 = x3;
  52. x2 = x4;
  53. y1 = y3;
  54. y2 = y4;
  55. }
  56. GL.PopMatrix ();
  57. }

参数分别为: x,y,z 中心点三维坐标, r 圆的半径, accuracy 精度,精度越小,越圆

如有错误,请不吝指教

Unity GL 画圆的更多相关文章

  1. Unity GL画折线

    新建一个脚本,这个物体得挂在有摄像机组件的物体上才能生效 OnPostRender() 这个函数才会被自动调用(类似生命周期自动调用) 然后就可以代码画线了,原理是openGL的画线 using Un ...

  2. unity gl 画线

    using UnityEngine; using System.Collections; public class TGLLine : MonoBehaviour { private static M ...

  3. 《图形学》实验六:中点Bresenham算法画圆

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 ...

  4. 【openGL】画圆

    #include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...

  5. OpenGL 3:画圆

    这次使用OpenGL画圆,而且中间画一个实心的五角星. 1. 画实心五角: 由于之前使用Polygen画会出现故障,或许是各个GPU硬件也会不一样的,所以使用Polygen画实心五角星并不可靠: 所以 ...

  6. 中点Bresenham画圆

    这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步. 算法步骤: (1) 输入圆的半径R. (2) 计算初始值d = 1 - ...

  7. WebGIS中基于AGS的画圆查询简析以及通过Polygon来构造圆的算法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 某个项目需求中需要在前端进行画圆查询,将圆范围上的多边形要素 ...

  8. ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆

    一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半 ...

  9. canvas入门(画圆)

    1.想在H5上画一个canvas,必须在页面上你需要的地方添加canvas标签, <canvas id="myCanvas"></canvas>   接着需 ...

随机推荐

  1. Java父类构造器的讲解

    众所周知,对于Java中的所有类而言,它们有一个根父类,即java.lang.Object类. 对于Java中构造器执行的顺序而言,程序执行的顺序为,先执行父类的非静态代码块,然后执行父类的相应的构造 ...

  2. js拼的onclick调用方法需要注意的地方 之一

    1.首先,明确一点,js方法中参数可以传递字符串,对象,number类型等,对象传递的是引用,方法中修改了,会影响到方法外面的对象. 2.下面重现项目中遇到的一个问题:(其实就是要明白通过引号来拼接字 ...

  3. tomcat 自带jdk

    http://blog.csdn.net/b452608/article/details/70143466

  4. javadoc 工具生成开发API文档

    =====================先来一点成就感===================== package com.springMybatis.dao; import com.springMy ...

  5. C语言学习笔记--struct 和 union关键字

    1.struct关键字 C 语言中的 struct 可以看作变量的集合struct中的每个数据成员都有独立的存储空间. 结构体与柔性数组 (1)柔性数组即数组大小待定的数组 (2)C 语言中可以由结构 ...

  6. “box-shadow”属性(转)

    “box-shadow”属性 box-shadow属性是一个CSS3属性,允许我们在几乎任何元素上来创建阴影效果,类似于在设计软件中的”drop shadow”.这些阴影效果允许我们在原本平面的.二维 ...

  7. Learning Python 002 print() 和 input()

    Python print() 和 input() print()函数 print()函数可以向终端中输入指定的内容. 输出当个字符串 .py文件中,输入下面的代码,并保存: print('hello ...

  8. easyui学习笔记1-(datagrid+dialog)

    jQuery EasyUI是一组基于jQuery的UI插件集合体.我的理解:jquery是js的插件,easyui是基于jquery的插件.用easyui可以很轻松的打造出功能丰富并且美观的UI界面. ...

  9. Windows 7,无法访问internet,DNS无响应

    我电脑网络连接显示有internet访问,但是网页打不开,QQ上不了,但可以PING通谷歌DNS 8.8.8.8,一PING域名就无法解析. 解决方法:开始-运行-输入"netsh wins ...

  10. git上传提交遇到问题

    git上传提交遇到问题 一. The local repository is out of date.Make sure all changes have been pulled from the r ...