Unity

您所在的位置:网站首页 3dmax物体弯曲命令怎么不弯 Unity

Unity

2024-06-23 18:13| 来源: 网络整理| 查看: 265

参考链接:【Unity】弹性鱼竿简单实现-通过贝塞尔曲线修改Mesh - 简书

参考论文:吴晓亮, 黄襄念. Unity 中使用贝塞尔曲线对三维物体进行弯曲[J]. 现代计算机, 2016 (5): 57-59.

unity项目下载:https://download.csdn.net/download/weixin_43042683/87690343

效果图

0 引言

随着虚拟现实的发展,在游戏引擎中对三维物体进行弯曲效果的模拟越来越重要。 在三维游戏引擎中,需要对一些三维的物体进行弯曲,以达到游戏操作中实时模拟物体弯曲。说到弯曲,自然而然想到曲线,从曲线的角度出发,那么关键就是如何生成曲线,以及如何根据曲线修改物体形状,从而达到弯曲的效果。 生成曲线的话,可以直接想到用贝塞尔曲线,传统的贝塞尔曲线算法被用 于各类图形制作软件中,如 Photoshop 等软件,但多限于二维线条的应用,在三维物体上的应用较少。 通过贝塞尔曲线算法结合三维物体的网格顶点,可以实现对条形三维物体进行弯曲变化。

1 贝塞尔曲线

Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点(也称锚点)、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。 1962年,法国数学家Pierre Bézier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名,称为贝塞尔曲线。

参考链接:Unity 贝塞尔曲线(Beizer curve)的原理与运用

1.1 一阶贝塞尔曲线

标准公式:

 示意图:

代码实现:

// 一阶贝塞尔曲线,参数P0、P1、t对应上方原理内的一阶曲线参数. Vector3 Bezier(Vector3 p0, Vector3 p1, float t) { return (1 - t) * p0 + t * p1; } 1.2二阶贝塞尔曲线

标准公式:

示意图:

代码实现:

// 二阶贝塞尔曲线,参数对应上方原理内的二阶曲线参数. Vector3 Bezier(Vector3 p0, Vector3 p1, Vector3 p2, float t) { Vector3 p0p1 = (1 - t) * p0 + t * p1; Vector3 p1p2 = (1 - t) * p1 + t * p2; Vector3 temp = (1 - t) * p0p1 + t * p1p2; return temp; } 1.3三阶贝塞尔曲线

标准公式:

示意图:

// 三阶贝塞尔曲线,参数对应上方原理内的三阶曲线参数. Vector3 Bezier(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) { Vector3 temp; Vector3 p0p1 = (1 - t) * p0 + t * p1; Vector3 p1p2 = (1 - t) * p1 + t * p2; Vector3 p2p3 = (1 - t) * p2 + t * p3; Vector3 p0p1p2 = (1 - t) * p0p1 + t * p1p2; Vector3 p1p2p3 = (1 - t) * p1p2 + t * p2p3; temp = (1 - t) * p0p1p2 + t * p1p2p3; return temp; } 1.4 n 阶贝塞尔曲线

标准公式:

代码实现:

//贝塞尔曲线公式 private Vector3 CalculateBezier(float t) { Vector3 ret = new Vector3(0, 0, 0); int n = 阶数; for(int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3