php渲染動(dòng)畫

三維動(dòng)畫渲染
簡(jiǎn)介
本插件旨在使用php在控制臺(tái)生成三3D動(dòng)畫,本插件僅適用于cli(命令行)模式。本項(xiàng)目已提供了立方體和金字塔模型的動(dòng)畫參數(shù),你可以使用demo進(jìn)行測(cè)試。本插件工作原理:類似于現(xiàn)在的激光掃描,獲取三維實(shí)物的外部輪廓的頂點(diǎn),然后連接這些頂點(diǎn),就可以構(gòu)成三維事務(wù)的模型。在使用本插件的時(shí)候,你只需要輸入三維事物輪廓的頂點(diǎn)坐標(biāo),然后提供這些頂點(diǎn)坐標(biāo)的連接路線(兩點(diǎn)確定一條直線),插件就可以繪制出對(duì)應(yīng)的三維模型。如果你提供了事物在三維坐標(biāo)中的旋轉(zhuǎn)角速度,那么本插件可以實(shí)現(xiàn)模型的旋轉(zhuǎn)功能。如果你提供了三維事務(wù)在x軸和y軸上的偏移方向和速度,那么本插件生成的動(dòng)畫中,模型可以實(shí)現(xiàn)上下左右移動(dòng)。如果你提供了不同時(shí)刻的模型的頂點(diǎn)的坐標(biāo),可以實(shí)現(xiàn)模型形狀的切換。本插件的用途暫時(shí)未知,因?yàn)闆]人會(huì)用php的cli模式來(lái)做動(dòng)畫。但是可以接入用戶輸入和網(wǎng)絡(luò)數(shù)據(jù)交互,從而實(shí)現(xiàn)類似于以前的網(wǎng)絡(luò)動(dòng)漫游戲。 所以,僅僅當(dāng)做小玩具吧。
安裝
composer require xiaosongshu/animation
使用實(shí)例
旋轉(zhuǎn)的立方體
<?php
require_once __DIR__ . '/src/Client.php';
$client = new \Xiaosongshu\Animation\Client();
/** 立方體 */
$config2 = [
/** 初始三維傾斜度 */
'angleX' => 0,
'angleY' => 0,
'angleZ' => 0,
/** 三維角速度 */
'angleStepX' => 0.01,
'angleStepY' => 0.01,
'angleStepZ' => 0.01,
/** 縮放比例 */
'scale' => 0,
/** 初始二維偏移量 */
'distanceX' => 0,
'distanceY' => 0,
/** 二維圖像偏移步長(zhǎng) */
'distanceXStep' => 1,
'distanceYStep' => 1,
/** 二維x軸正方向偏移 */
'directionX' => -1,
/** 二維y軸正方向偏移 */
'directionY' => -1,
/** 三維圖案頂點(diǎn)坐標(biāo) : 更新三維物體的頂點(diǎn)坐標(biāo),可以實(shí)現(xiàn)模型的形狀改變 */
'vertices' => [
/** 第一個(gè)動(dòng)作 立方體由8個(gè)頂點(diǎn)構(gòu)成 */
[
[-1, -1, -1],
[1, -1, -1],
[1, 1, -1],
[-1, 1, -1],
[-1, -1, 1],
[1, -1, 1],
[1, 1, 1],
[-1, 1, 1]
],
// ... 其他動(dòng)作
],
/** 三維圖案繪圖路徑 兩點(diǎn)構(gòu)成一條直線邊,一個(gè)立方體由12條邊構(gòu)成 */
'edges' => [[0, 1], [1, 2], [2, 3], [3, 0], [4, 5], [5, 6], [6, 7], [7, 4], [0, 4], [1, 5], [2, 6], [3, 7]],
],
/** 自定義三維圖像頂點(diǎn)變化函數(shù),此處僅為示例,請(qǐng)根據(jù)實(shí)際情況設(shè)置符合你自己需求的頂點(diǎn)變化函數(shù),沒有則不寫,如果需要?jiǎng)討B(tài)修改三維物體形狀,建議使用自定義函數(shù) */
'function' => function (&$vertices,$index) {
# 若需要測(cè)試立方體形狀變化,去掉下面的注釋即可
// /** 第一個(gè)頂點(diǎn)的變化函數(shù) */
// if ($index == 0){
// /** x坐標(biāo) */
// $vertices[0] = 4;
// /** y坐標(biāo) */
// $vertices[1] = 4;
// /** z坐標(biāo) */
// $vertices[2] = 4;
// }
// /** 第二個(gè)頂點(diǎn)的變化函數(shù) */
// if ($index == 1){
// /** x坐標(biāo) */
// $vertices[0] = $vertices[0] + 1;
// /** y坐標(biāo) */
// $vertices[1] = $vertices[1] + sin(30);
// /** z坐標(biāo) */
// $vertices[2] = $vertices[2] + rand(2,6);
// }
// ... 其他頂點(diǎn)的變化函數(shù)
};
# 添加3D動(dòng)畫
$client->add3dAnimation($config2);
# 運(yùn)行動(dòng)畫
$client->run();
運(yùn)行
php yourPath/demo.php
效果圖
添加二維動(dòng)畫流星雨
流星雨代碼
<?php
require_once __DIR__ . '/src/Client.php';
$client = new \Xiaosongshu\Animation\Client();
/** 流星 */
$config3 = [
'maxStars' => 10,
'numStars' => 10,
'isWaterLine' => true,
/** 初始二維偏移量 */
'distanceX' => 0,
'distanceY' => 0,
/** 二維圖像偏移步長(zhǎng) */
'distanceXStep' => 2,
'distanceYStep' => 1,
/** 二維x軸正方向偏移 */
'directionX' => 0,
/** 二維y軸正方向偏移 */
'directionY' => 0,
];
# 添加2D動(dòng)畫
$client->addStarRain($config3);
# 運(yùn)行動(dòng)畫
$client->run();
運(yùn)行
php yourPath/demo.php
流星雨動(dòng)畫效果
動(dòng)畫疊加
本插件可以實(shí)現(xiàn)多個(gè)動(dòng)畫相互疊加,效果如下所示。
<?php
require_once __DIR__ . '/src/Client.php';
$client = new \Xiaosongshu\Animation\Client();
# 添加3D動(dòng)畫
$client->add3dAnimation($config2);
# 添加2D動(dòng)畫
$client->addStarRain($config3);
# 運(yùn)行動(dòng)畫
$client->run();
運(yùn)行
php yourPath/demo.php
其它
先這樣了,后面再做其他特效吧。