使用 Image_3D 庫繪製三維立體圖形,本文演示自定義三棱錐星體(前後面 + 3 側面)構建全流程。
<?php
require_once('Image/3D.php');
$image = new Image_3D();
$image->setColor(new Image_3D_Color(255, 255, 255));
// 創建三個光源
$light1 = $image->createLight('light', array(-50, -50, -50));
$light1->setColor(new Image_3D_Color(100, 250, 100));
$light2 = $image->createLight('light', array(50, -50, 0));
$light2->setColor(new Image_3D_Color(100, 100, 250));
$light3 = $image->createLight('light', array(50, 50, 0));
$light3->setColor(new Image_3D_Color(50, 0, 100));
// 定義多邊形頂點座標 (x, y, z)
$polygons = array();
// 前面
$polygons[] = array(
array(0, -120, 0), array(-18, -12, 0),
array(-86, 48, 0), array(0, 18, 0),
array(86, 48, 0), array(18, -12, 0)
);
// 後面 (z=60)
$polygons[] = array(
array(0, -120, 60), array(-18, -12, 60),
array(-86, 48, 60), array(0, 18, 60),
array(86, 48, 60), array(18, -12, 60)
);
// 三個側面
$polygons[] = array( // 側面 1
array(0, -120, 0), array(-18, -12, 0),
array(-86, 48, 0), array(-86, 48, 60),
array(-18, -12, 60), array(0, -120, 60)
);
$polygons[] = array( // 側面 2
array(-86, 48, 0), array(0, 18, 0),
array(86, 48, 0), array(86, 48, 60),
array(0, 18, 60), array(-86, 48, 60)
);
$polygons[] = array( // 側面 3
array(86, 48, 0), array(18, -12, 0),
array(0, -120, 0), array(0, -120, 60),
array(18, -12, 60), array(86, 48, 60)
);
// 構建 3D 對象
foreach ($polygons as $poly) {
$points = array();
foreach ($poly as $set) {
$points[] = new Image_3D_Point($set[0], $set[1], $set[2]);
}
$p = $image->createObject('polygon', $points);
$p->setColor(new Image_3D_Color(255, 255, 255));
}
// 變換:旋轉 (-10, -25, -15) 度
$image->transform($image->createMatrix('Rotation', array(-10, -25, -15)));
// 渲染輸出
$image->createRenderer('perspectively');
$image->createDriver('gd');
$image->render(300, 300, 'anim.png');
echo '<img src="anim.png">';
?>

| 類/方法 | 作用 |
|---|---|
Image_3D | 核心場景管理器 |
createLight() | 創建光源,支持位置與顏色 |
Image_3D_Point | 三維頂點封裝 |
createObject('polygon', $points) | 創建多邊形面片 |
createMatrix('Rotation', $angles) | 生成旋轉變換矩陣 |
createRenderer('perspectively') | 透視投影渲染器 |
createDriver('gd') | GD 驅動輸出 PNG/JPG |
render($w, $h, $filename) | 執行渲染並保存 |