Java如何绘制圆锥,五、Unity 生成几种常用模型mesh-----ConeShape(圆锥体)
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(圆锥体)相关推荐
- springBoot整合rabbitmq并测试五种常用模型
之前我们记录了原生java代码使用rabbitmq的方法,很简单,类似于原生jdbc代码一样,将连接对象抽离出来作为工具类,生产者和消费者通过工具类获取连接对象,进而获取通道对象,再注册交换机或者是队 ...
- 剖析Hibernate主键生成几种常用方式
剖析Hibernate主键生成几种常用方式 2009-09-28 10:52 佚名 IT168 字号:T | T 这里介绍Hibernate主键生成几种常用方式,由Hibernate根据不同的数据库方 ...
- JAVA中方法的类型转换_Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- java淡蓝色怎么表示_JAVA正则表达式4种常用功能 [转]
JAVA正则表达式4种常用功能 正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: 以下是代码片段: String str=&quo ...
- java并发编程(十五)——常见的几种阻塞队列
前言 我们来看一下Java中常见的几种的阻塞队列的相关知识. 主要并发队列 Java中队列的接口是Queue,其实现类如下图所示: 分为阻塞队列和非阻塞队列两种. 何为阻塞队列 阻塞队列,也就是Blo ...
- Java开发笔记(五十)几种开放性修饰符
前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...
- java model1和model2_Java项目(4)——探究两种开发模型的异同-Model1与Model2
弱弱的说一句: jsp在web服务器上,这一点应该没有疑问吧? 首先很俗套地看下两个模型. Model1就是实现,实现就行,系统简单,谈不上架构,正如简单工厂并不算在23个常用设计模式之列一样.Mod ...
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块...
JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...
- Java Graphics绘制表格和直方图
Java Graphics绘制表格和直方图 最近有一个需求是使用Java的swing中Graphics绘制表格和直方图,感觉还是有点意思记录一下,先上图. 开始感觉有点复杂,其实和自己在Windo ...
最新文章
- TVM部署预定义模型
- [E::fai_build_core] Different line length in sequence ‘kraken:taxid|436|NZ_CP062147.1‘
- windows下常查看端口占用方法总结
- oracle if=,oracle中if/else的三种实现方式详解
- 异常机制及throw与throws的区别 (z)
- java comparable Comparator 区别
- 详细讲解 移植Uboot到ARMer9开发系统上
- MSP430F5529 DriverLib 库函数学习笔记(十三)认识低功耗模式
- C++ primer第六章6.4函数的学习 之函数的重载
- 总结一些C/C++的知识点
- 请君入瓮:研究员找到 Emotet 的bug,并成功阻止传播
- 页脚保持在未满屏页面的底部
- 如何安装.net framework?Win11安装net framework的方法
- python分数计算器_python计算器实现过程
- GPS导航电文编码与校验
- 完全支持双层PDF 开源的PDF分离与合并软件 C 版本 转自codeproject
- 公共基础知识:四大名楼简介
- 计算机端口连接失败,电脑Telnet命令提示在端口23连接失败的解决办法
- 奇偶数求和:输入任意个正整数(以输入负数表示结束输入),分别求出所有的奇数之和,所有的偶数之和。 示例: 输入格式:1 2 3 4 -1 输出格式:sumodd=4 sumeven=
- 图的两种遍历:深度优先遍历+广度优先遍历