日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2024/1/8 java 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(圆锥体)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。