[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控

  • 1.材质法
  • 2.绘制调试球体
  • 3.网格连接
    • 蓝图项目链接:
  • 4.高阶画球并操控
    • 蓝图项目链接:

1.材质法

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第1张图片
缺点:是实体的,只能欺骗视觉,实际还是一个实体体积球,往里放东西显示不出来放进去的东西。

2.绘制调试球体

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第2张图片

缺点:简单画的球,无法准确操纵,但实际项目中足以应对绝大多数情况。

3.网格连接


主要思路:
1.得到一个球 球面上 所有的 顶点坐标。
2.循环遍历 连接 这些 顶点坐标。
只要分段够多,就够自然,就越接近一个球
例如:
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第3张图片

画球的算法:(连接)
1.计算球面上某一个点P的坐标
2.顶点索引
3.连接顶点
1.表达式表达出P点坐标为(需要细细的琢磨看透)
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第4张图片
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第5张图片
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第6张图片

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第7张图片
顶点的坐标的计算(R=1):
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第8张图片
2.顶点索引
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第9张图片
Y:球层数(整个球带上两端顶点有几层)
X:顶点数(每一层有多少个顶点)
例如:Y:5 x:10

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第10张图片

一共:(5+1-2)10+2=42个顶点
42+10+10+4=66个坐标点数
Y为5,则带上两端顶点一共6层,中间层是4层,一层10个顶点,加上两端顶点,一共42个顶点
板上钉钉有42个顶点数,10是因为第一层和最后一层都多计算一层的点,而中间的层每层多计算一个顶点。
Y:5 X:5
4
5+2=22顶点
22+5+5+4=36坐标点
Y:30 X:30
29*30+2=872顶点
872+30+30+29=961坐标点

3个顶点互相连接组成一个三角形,所以3个顶点组成一个向量,在每两个顶点连一条线。

一个简单的球就画好了
但此时,这个球只能在原点(0,0,0)处出现,无法移动
也无法扩大缩放某一层圆

中文:

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第11张图片
英文
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第12张图片

主要是以下两段代码:

	// 生成球的顶点
    for (int y = 0; y <= Y_SEGMENTS; y++)
    {
        for (int x = 0; x <= X_SEGMENTS; x++)
        {
            float xSegment = (float)x / (float)X_SEGMENTS;
            float ySegment = (float)y / (float)Y_SEGMENTS;
            float xPos = std::cos(xSegment * 2.0f * PI) * std::sin(ySegment * PI);
            float yPos = std::cos(ySegment * PI);
            float zPos = std::sin(xSegment * 2.0f * PI) * std::sin(ySegment * PI);


            sphereVertices.push_back(xPos);
            sphereVertices.push_back(yPos);
            sphereVertices.push_back(zPos);
        }
    }

    // 生成球的;三角形面索引
    for (int i = 0; i < Y_SEGMENTS; i++)
    {
        for (int j = 0; j < X_SEGMENTS; j++)
        {

            sphereIndices.push_back(i * (X_SEGMENTS + 1) + j);
            sphereIndices.push_back((i + 1) * (X_SEGMENTS + 1) + j);
            sphereIndices.push_back((i + 1) * (X_SEGMENTS + 1) + j + 1);

            sphereIndices.push_back(i * (X_SEGMENTS + 1) + j);
            sphereIndices.push_back((i + 1) * (X_SEGMENTS + 1) + j + 1);
            sphereIndices.push_back(i * (X_SEGMENTS + 1) + j + 1);
        }
    }

蓝图项目链接:

https://blueprintue.com/blueprint/l57-rxf4/

4.高阶画球并操控

主要是共线向量
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第13张图片
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第14张图片

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第15张图片
[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第16张图片

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第17张图片

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第18张图片

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第19张图片

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第20张图片

[虚幻引擎][UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控_第21张图片

蓝图项目链接:

https://blueprintue.com/blueprint/nqcqx_u6/

参考:
添加链接描述

你可能感兴趣的:(UE专栏,ue5,算法,画球,线框球,虚幻引擎5)