unity 球体表面平均分割点
之前看了别人的一份源码,讲到了球体表面平均分割点,于是也好奇去查了一下算法,自己写不出来,借用算法在unity写了一个小demo
using UnityEngine;
using System.Collections; public class DistrbutedPointsOnSphere : MonoBehaviour { public Camera camera;
/// <summary>
/// 父级 -- 球
/// </summary>
public Transform parent;
/// <summary>
/// 预设 -- 球
/// </summary>
public GameObject prefab;
public Transform[] kids; // Use this for initialization
void Start () {
CalualteSphere();
} // Update is called once per frame
void Update () {
if (!Input.GetMouseButton(0))
return;
float fMouseX = Input.GetAxis("Mouse X");
float fMouseY = Input.GetAxis("Mouse Y");
parent.Rotate(Vector3.up, -fMouseX * 2, Space.World);
parent.Rotate(Vector3.right, fMouseY * 2, Space.World);
for (int i = 0; i < kids.Length; i++)
kids[i].LookAt(camera.transform);
}
/// <summary>
/// 平均分成的等份
/// </summary>
int N = 50;
/// <summary>
/// 小球的半径
/// </summary>
float size = 0.5f; /// <summary>
/// 球体表面平均分割点
/// </summary>
void CalualteSphere()
{
float inc = Mathf.PI * (3.0f - Mathf.Sqrt(5.0f));
float off = 2.0f / N;//注意保持数值精度
kids = new Transform[N];
for(int i=0;i<N;i++)
{
float y = (float)i * off - 1.0f + (off / 2.0f);
float r = Mathf.Sqrt(1.0f - y * y);
float phi = i * inc;
Vector3 pos=new Vector3(Mathf.Cos(phi)*r*size,y*size,Mathf.Sin(phi)*r*size);
GameObject tempGo = Instantiate(prefab) as GameObject;
tempGo.transform.parent = parent;
tempGo.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
tempGo.transform.localPosition = pos;
tempGo.SetActive(true);
kids[i]=tempGo.transform;
}
} /// <summary>
/// 点击小球,将他移动到中心点
/// </summary>
/// <param name="pos">小球的自身位置</param>
void ClickLittleSphere(Vector3 pos)
{
Vector3 vec301 = pos - Vector3.zero;
Vector3 vec302 = camera.transform.position - parent.transform.position;
parent.rotation = Quaternion.FromToRotation(vec301, vec302);
}
}
unity 球体表面平均分割点的更多相关文章
- (转) unity 在移动平台中,文件操作路径详解
http://www.unitymanual.com/thread-23491-1-1.html 今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够 ...
- unity 在移动平台中,文件操作路径详解
今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够更好.更快的掌握,当然,如有不足的地方 欢迎指正!!! 相信大家在开发过程中,难免会保存一些文件在 ...
- 3D语音天气球(源码分享)——创建可旋转的3D球
开篇废话: 在9月份时参加了一个网站的比赛,比赛的题目是需要使用第三方平台提供的服务做出创意的作品. 于是我选择使用语音服务,天气服务,Unity3D,Android来制作一个3D语音天气预报,我给它 ...
- 喵的Unity游戏开发之路 - 在球体上行走
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- Unity 5 中的全局光照技术详解
貌似是某位好人翻译的 https://unity3d.com/cn/learn/tutorials/topics/graphics/unity-5-lighting-and-rendering#rd? ...
- Unity 5 中的全局光照技术详解(建议收藏)
本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING (文章较长,请耐心阅读)简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法, ...
- Unity 5--全局光照技术
本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING 简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常 ...
- 【Unity】9.3 粒子系统生成器详解
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 上一节已经介绍过了在Unity 5.x中两种创建粒子效果的方式(方式1.方式2). 这一节我们主要学习第2种方式的基本概 ...
- 04、Unity 5--全局光照技术
本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING 简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常 ...
随机推荐
- springMVC源码分析--SimpleUrlHandlerMapping(四)
上一篇博客springMVC源码分析--AbstractUrlHandlerMapping(三)中我们介绍了AbstractUrlHandlerMapping,主要介绍了一个handlerMap的ur ...
- Spring3+Hibernate4连接Oracle11g数据库参数配置
应用场合:使用SSH框架开发一套应用系统,因为不同的SSH版本+系统架构会导致各种的错误,总结测试了下,成功测试得出本文配置 软件版本:Sping3+Hibernate4+Maven3 主要配置文件内 ...
- Python动态展现之一
首先: def f(): print('first') def g(): f() g() def f(): print('second') g() 结果: >>> first sec ...
- 27 自定义View 和案例
有时安卓提供的View不满足我们的需求时可以创建一个类继承View或其子类重写方法 如 package com.qf.sxy.day28_customview.view; import android ...
- 2apt-get命令,deb包安装,源码安装
1 安装卸载软件 更新源服务器列表 sudovi /etc/apt/sources.list 更新完服务器列表后需要更新下源 sudoapt-get update 更新源 sudoapt-get in ...
- EJB_开发EJB容器模型的WEB服务
开发EJB容器模型的WEB服务 WEB服务 Web服务也是一种分布式技术,它与EJB最大的不同是,Web服务属于行业规范,可以跨平台及语言.而EJB属于Java平台的规范,尽管理论上可以跨平台,但实现 ...
- 在代码中写view 的长宽高等
获得资源的id的另一种方法 int layoutRes = getResources().getIdentifier("pager_view" + i, "layout& ...
- JDK的安装以及配置
JDK的安装以及配置 JDK(Java Development Kit),顾名思义,是 Java 语言的软件开发工具包(SDK). Android发开使用Java语言,所以装JDK是Android开发 ...
- hive分组排序 取top N
pig可以轻松获取TOP n.书上有例子 hive中比较麻烦,没有直接实现的函数,可以写udf实现.还有个比较简单的实现方法: 用row_number,生成排名序列号.然后外部分组后按这个序列号多虑, ...
- React Native开发工具Nuclide使用
之前写RN的时候首选webstorm,这是之前做前端已经习惯的工具,其实RN开发官网推荐的是Nuclide工具, Nuclide是Fackbook专门为React开发IDE,今天也来尝试下,如果对we ...