提到 3D 圖形繪製,許多人第一反應是 Blender、Three.js 或 WebGL。但 PHP 配合 PEAR Image_3D 套件,同樣能在伺服器端生成立方體、圓錐、球體、3D 文字、餅圖等 3D 物件,輸出 PNG、SVG 甚至終端機 ASCII 藝術。本文手把手帶你完成環境建置、座標系理解、基礎物件渲染與進階動畫技巧。
php.ini 取消註解 extension=gd)pear.bat / pear)下載 Image_3D 0.4.1 alpha(官方:pear.php.net),放入含 pear.bat 目錄(如 C:\php 或 C:\wamp\php),執行:
pear install Image_3D-0.4.1.gz
安裝完成後,類別檔位於 C:\wamp\php\PEAR\Image\(Windows)或 /usr/share/php/Image/(Linux)。
Image_3D 採用右手座標系:
物件變換順序:縮放 → 旋轉 → 平移。旋轉以度數指定,繞原點旋轉;若需繞物件中心旋轉,先平移至原點,旋轉後再平移回原位。
<?php
require_once 'Image/3D.php';
$world = new Image_3D_World();
$world->setBackgroundColor(new Image_3D_Color(240, 240, 240));
// 建立立方體
$cube = new Image_3D_Object_Cube($world);
$cube->setColor(new Image_3D_Color(70, 130, 180));
$cube->transform(
new Image_3D_Matrix_Move(0, 0, -50), // 移離鏡頭
new Image_3D_Matrix_Rotation(30, 20, 0), // X/Y/Z 旋轉角度
new Image_3D_Matrix_Scale(1.2, 1.2, 1.2) // 縮放
);
// 光源
$light = new Image_3D_Light_Point($world, 100, 100, 200);
$light->setColor(new Image_3D_Color(255, 255, 255));
// 渲染輸出 PNG
$renderer = new Image_3D_Renderer_Perspectively($world);
$renderer->setSize(400, 300);
$renderer->render();
$renderer->save('cube.png');
echo "立方體已生成:cube.png";
| 類別 | 描述 | 關鍵參數 |
|---|---|---|
Image_3D_Object_Cube | 立方體 | 大小、顏色 |
Image_3D_Object_Cone | 圓錐體 | 底半徑、高度、分段數 |
Image_3D_Object_Sphere | 球體 | 半徑、經緯度分段 |
Image_3D_Object_Text | 3D 文字 | 字串、字體、擠出深度 |
Image_3D_Object_Pie | 3D 餅圖 | 資料陣列、顏色組、起始角度 |
$pie = new Image_3D_Object_Pie($world);
$pie->setData([35, 25, 20, 15, 5]); // 數據
$pie->setColors([
new Image_3D_Color(220, 50, 50),
new Image_3D_Color(50, 180, 50),
new Image_3D_Color(50, 100, 220),
new Image_3D_Color(220, 200, 50),
new Image_3D_Color(200, 50, 200)
]);
$pie->setStartAngle(90); // 從頂部開始
$pie->setThickness(20); // 立體厚度
Image_3D_Renderer_Perspectively);矢量需求用 SVG(Image_3D_Renderer_SVG);終端機除錯用 ASCII(Image_3D_Renderer_ASCII)。include_path 包含 PEAR 目錄,或在腳本開頭 set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/pear')。--with-gd --enable-gd-native-ttf。memory_limit(如 256M),或降低物件分段數。Image_3D 雖屬 alpha 階段且年久未更新,但為 PHP 伺服器端 3D 生成提供了罕見的純 PHP 方案。結合快取與佇列,足以支撐報表圖表、驗證碼、個性化頭像等實際業務場景。