Unity GL 画圆

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 = 1 / accuracy;
 9     float x1 = x, x2 = x, y1 = 0, y2 = 0;
10     float x3 = x, x4 = x, y3 = 0, y4 = 0;
11
12     double squareDe;
13     squareDe = r * r - Math.Pow (x - x1, 2);
14     squareDe = squareDe > 0 ? squareDe : 0;
15     y1 = (float)(y + Math.Sqrt (squareDe));
16     squareDe = r * r - Math.Pow (x - x1, 2);
17     squareDe = squareDe > 0 ? squareDe : 0;
18         y2 = (float)(y - Math.Sqrt (squareDe));
19     for (int i = 0; i < size; i++) {
20         x3 = x1 + stride;
21         x4 = x2 - stride;
22         squareDe = r * r - Math.Pow (x - x3, 2);
23         squareDe = squareDe > 0 ? squareDe : 0;
24                 y3 = (float)(y + Math.Sqrt (squareDe));
25         squareDe = r * r - Math.Pow (x - x4, 2);
26         squareDe = squareDe > 0 ? squareDe : 0;
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 精度,精度越小,越圆

如有错误,请不吝指教

时间: 2024-12-25 02:07:30

Unity GL 画圆的相关文章

Unity GL画折线

新建一个脚本,这个物体得挂在有摄像机组件的物体上才能生效 OnPostRender() 这个函数才会被自动调用(类似生命周期自动调用) 然后就可以代码画线了,原理是openGL的画线 using UnityEngine; using System.Collections; using System.Collections.Generic; /// <summary> /// GL画图 /// </summary> public class GLDraw : UnityNormalS

unity GL画线

对某篇文章加以修改.把这个脚本挂到相机下,才能显示. using UnityEngine; using System.Collections; public class joint{ public Vector3 org; public Vector3 end; } public class Drawline : MonoBehaviour { private Vector3 orgPos; private Vector3 endPos; private bool canDrawLines  =

OpenGL画圆

中点画圆 1 #include<gl/glut.h> 2 3 4 void MidPointCirle(int r) 5 { 6 int x,y; 7 float d; 8 x=0;y=r;d=1.25-r; 9 glColor3f(1.0f,1.0f,1.0f); 10 glVertex2i(x,y); 11 while(x<=y) 12 { 13 if(d<0) 14 d+=2*x+3; 15 else 16 { 17 d+=2*(x-y)+5; 18 y--; 19 } 20

Assignment 3 在OpenGL中使用Bresenham算法画圆

一.      任务目标 利用OpenGL,实现Bresenham算法画圆. 二.      任务要求 使用整数来确定点的位置. 标出圆心.(不太明白show的含义,于是我在圆心处画了一个点来表示.) 使用至少16个点表示一个圆. 三.      使用平台 Windows 8.1 Visual Studio 2012 四.      实现简述 与Bresenham直线算法类似,采用的是中点画圆算法. 定义圆的一个函数 可根据f(x, y)符号判断点(x, y)的位置: 于是假设点pi(xi, y

OpenGL 3:画圆

这次使用OpenGL画圆,而且中间画一个实心的五角星. 1. 画实心五角: 由于之前使用Polygen画会出现故障,或许是各个GPU硬件也会不一样的,所以使用Polygen画实心五角星并不可靠: 所以这里直接使用三角形画出五角星,不须要Polygen. 2 画圆 由于GLEW里面没有现成的圆形,所以仅仅能使用人工定顶点,然后画圆的方法: 当中的数学原理能够參考这里:http://slabode.exofire.net/circle_draw.shtml 最后得到效果: 非常美丽,非常标准的五角星

【openGL】画圆

#include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math.h> #include <stdio.h> const int n = 50; const GLfloat R = 0.5f; const GLfloat PI = 3.24250265357f; void myDisplay(void) { glClear(GL_COLOR_BUFFER

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

开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: 1 #include <gl/glut.h> 2 3 #define WIDTH 500 4 #define HEIGHT 500 5 #define OFFSET 15 6 #define R 8 7 8 void Init() //其它初始化 9 { 10 glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明 11 glColor3f

unity3d GL画线/物体跟随/坐标系转换

看见标题的人是不是在想... 一个小小的GL画线难吗? 一个小小的物体跟随难吗? 嗯,的确,一点不难.... 我一开始也是像你们那样想的,但是实际操作起来,还是和理论有区别的 写这个demo起因是这样的: 面试到了一家虚拟现实的公司,因为没有去公司 网上直接谈的,谈妥了hr估计是想看看我能不能胜任 给了我一张效果图,让我去实现画线的功能 咳咳,要求还是比较细致的,这里我们后面说 废话不多说,老规矩,先上效果图,然后直接进入主题 第一张是hr给我的图,第二张是我自己实现的 需求如下: 1.模型是旋

简单谈谈自己对htm与css中画圆的理解。

近几天,在利用css编辑中,发现不少边框图像要求是矩形圆角或者直接画一个圆的例子,下面和大家一起分享下对画圆的看法. 在这次的分享中,我侧重给大家看一些例子来更好的理解, 我们都明白,画圆时要用到“border-radius:”,而且在每次画圆时,我们都应该先设定一个width和height. 那么我们可以这样理解, 我们的圆是在一个矩形(正方形)中进行裁剪的,而border-radius就是我们要裁剪的尺寸. 给大家一些图片,更好的去理解. 首先,我们设定一个width为100px,高度为10