1、获得顶点的数据集合protected override Vector3[] GetVertices()

{

var points = new Vector3[_circularSideCount];//保存底面圆形的点集合

for (int i = 0; i < _circularSideCount; i++)

{

var rad = i * 1.0f / _circularSideCount * Mathf.PI * 2;

var cos = Mathf.Cos(rad) * _radius;

var sin = Mathf.Sin(rad) * _radius;

points[i] = new Vector3(cos, -_height * 0.5f, sin) - _verticeOffset;

}

int curIndex = 0;//当前索引

int arrayLen = (_circularSideCount + 1) * 3;//顶点数组的长度

var vertices = new Vector3[arrayLen];

//底面

vertices[curIndex++] = new Vector3(0, -_height * 0.5f, 0) - _verticeOffset;

for (int i = 0; i < _circularSideCount; i++)

{

vertices[curIndex++] = points[i];

}

//侧面

var topPoint = new Vector3(0, _height * 0.5f, 0) - _verticeOffset;//顶点的位置

for (int i = 0; i < _circularSideCount; i++)

{

vertices[curIndex++] = points[i];

vertices[curIndex++] = topPoint;

}

vertices[curIndex] = points[0];

vertices[curIndex++] = topPoint;

return vertices;

}

2、获得法线方向的数据集合protected override Vector3[] GetNormals()

{

int curIndex = 0;

int arrayLen = (_circularSideCount + 1) * 3;//法线数组的长度

var normals = new Vector3[arrayLen];

//底面

for (int i = 0; i <= _circularSideCount; i++)

{

normals[curIndex++] = Vector3.down;

}

//侧面

for (int i = 0; i <= _circularSideCount; i++)

{

var rad = i * 1.0f / _circularSideCount * Mathf.PI * 2;

var cos = Mathf.Cos(rad);

var sin = Mathf.Sin(rad);

normals[curIndex++] = new Vector3(cos, 0, sin);

normals[curIndex++] = new Vector3(cos, 0, sin);

}

return normals;

}

3、获得三角面顶点的索引protected override int[] GetTriangles()

{

int curIndex = 0;

int arrayLen = _circularSideCount * 3 + _circularSideCount * 3;//数组长度

var triangles = new int[arrayLen];

//底面

for (int i = 0; i < _circularSideCount - 1; i++)

{

triangles[curIndex++] = 0;

triangles[curIndex++] = i + 1;

triangles[curIndex++] = i + 2;

}

triangles[curIndex++] = 0;

triangles[curIndex++] = _circularSideCount;

triangles[curIndex++] = 1;

//侧面

int startIndex = _circularSideCount + 1;

for (int i = 0; i < (_circularSideCount - 1) * 2; i += 2)

{

triangles[curIndex++] = startIndex + i;

triangles[curIndex++] = startIndex + i + 1;

triangles[curIndex++] = startIndex + i + 2;

}

triangles[curIndex++] = startIndex + (_circularSideCount - 1) * 2;

triangles[curIndex++] = startIndex + (_circularSideCount - 1) * 2 + 1;

triangles[curIndex] = startIndex;

return triangles;

}

4、获得UV坐标的数据集合protected override Vector2[] GetUVs()

{

int curIndex = 0;

int arrayLen = (_circularSideCount + 1) * 3;

var uvs = new Vector2[arrayLen];

//底面

uvs[curIndex++] = new Vector2(0.5f, 0.5f);

for (int i = 0; i < _circularSideCount; i++)

{

var rad = i * 1.0f / _circularSideCount * Mathf.PI * 2;

var cos = Mathf.Cos(rad);

var sin = Mathf.Sin(rad);

uvs[curIndex++] = new Vector2(cos, sin);

}

//侧面

float value = 1.0f / _circularSideCount;

for (int i = 0; i <= _circularSideCount; i++)

{

uvs[curIndex++] = new Vector2(value * i, 0);

uvs[curIndex++] = new Vector2(value * i, 1);

}

return uvs;

}

效果如下:

Java如何绘制圆锥,五、Unity 生成几种常用模型mesh-----ConeShape(圆锥体)相关推荐

  1. springBoot整合rabbitmq并测试五种常用模型

    之前我们记录了原生java代码使用rabbitmq的方法,很简单,类似于原生jdbc代码一样,将连接对象抽离出来作为工具类,生产者和消费者通过工具类获取连接对象,进而获取通道对象,再注册交换机或者是队 ...

  2. 剖析Hibernate主键生成几种常用方式

    剖析Hibernate主键生成几种常用方式 2009-09-28 10:52 佚名 IT168 字号:T | T 这里介绍Hibernate主键生成几种常用方式,由Hibernate根据不同的数据库方 ...

  3. JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  4. java淡蓝色怎么表示_JAVA正则表达式4种常用功能 [转]

    JAVA正则表达式4种常用功能 正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: 以下是代码片段: String str=&quo ...

  5. java并发编程(十五)——常见的几种阻塞队列

    前言 我们来看一下Java中常见的几种的阻塞队列的相关知识. 主要并发队列 Java中队列的接口是Queue,其实现类如下图所示: 分为阻塞队列和非阻塞队列两种. 何为阻塞队列 阻塞队列,也就是Blo ...

  6. Java开发笔记(五十)几种开放性修饰符

    前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...

  7. java model1和model2_Java项目(4)——探究两种开发模型的异同-Model1与Model2

    弱弱的说一句: jsp在web服务器上,这一点应该没有疑问吧? 首先很俗套地看下两个模型. Model1就是实现,实现就行,系统简单,谈不上架构,正如简单工厂并不算在23个常用设计模式之列一样.Mod ...

  8. JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块...

    JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...

  9. Java Graphics绘制表格和直方图

    Java Graphics绘制表格和直方图 最近有一个需求是使用Java的swing中Graphics绘制表格和直方图,感觉还是有点意思记录一下,先上图. ​ 开始感觉有点复杂,其实和自己在Windo ...

最新文章

  1. TVM部署预定义模型
  2. [E::fai_build_core] Different line length in sequence ‘kraken:taxid|436|NZ_CP062147.1‘
  3. windows下常查看端口占用方法总结
  4. oracle if=,oracle中if/else的三种实现方式详解
  5. 异常机制及throw与throws的区别 (z)
  6. java comparable Comparator 区别
  7. 详细讲解 移植Uboot到ARMer9开发系统上
  8. MSP430F5529 DriverLib 库函数学习笔记(十三)认识低功耗模式
  9. C++ primer第六章6.4函数的学习 之函数的重载
  10. 总结一些C/C++的知识点
  11. 请君入瓮:研究员找到 Emotet 的bug,并成功阻止传播
  12. 页脚保持在未满屏页面的底部
  13. 如何安装.net framework?Win11安装net framework的方法
  14. python分数计算器_python计算器实现过程
  15. GPS导航电文编码与校验
  16. 完全支持双层PDF 开源的PDF分离与合并软件 C 版本 转自codeproject
  17. 公共基础知识:四大名楼简介
  18. 计算机端口连接失败,电脑Telnet命令提示在端口23连接失败的解决办法
  19. 奇偶数求和:输入任意个正整数(以输入负数表示结束输入),分别求出所有的奇数之和,所有的偶数之和。 示例: 输入格式:1 2 3 4 -1 输出格式:sumodd=4 sumeven=
  20. 图的两种遍历:深度优先遍历+广度优先遍历

热门文章

  1. 贴片电阻有哪几类封装尺寸?
  2. 京东青龙上车教程保姆级别讲解为什么上车以及详细开活动教程
  3. 使用Arduino UNO以及好盈电调控制无刷电机
  4. 威联通使用Typecho搭建博客
  5. opencv 打开摄像头
  6. java小组口号,小组口号大全
  7. 阿里云Centos7服务器域名解析和Nginx配置
  8. css中字体之间的距离是什么意思,css字符间距(css文字间距怎么设置)
  9. think服务器换系统,ThinkServer TD340服务器安装操作系统[转]
  10. Xss漏洞原理分析及简单的讲解