บทนำ

Aspose.3D FOSS สำหรับ TypeScript (@aspose/3d) เป็นไลบรารีรูปแบบไฟล์ 3D แบบโอเพนซอร์ส ใบอนุญาต MIT ที่ออกแบบมาสำหรับ Node.js เป็นหลัก นักพัฒนาที่สร้างตัวดูโมเดล 3D, ตัวแปลงรูปแบบ, เครื่องมือประมวลผลเรขาคณิต, หรือไพป์ไลน์ 3D ฝั่งเซิร์ฟเวอร์สามารถติดตั้งได้ด้วยคำสั่งเดียว (ดู Installation guide) และเริ่มโหลด, สร้าง, และส่งออกเนื้อหา 3D ได้ทันที ไลบรารีใช้ require('fs') และ Buffer จาก Node.js; การใช้งานในเบราว์เซอร์ต้องใช้ชิมที่เหมาะสมสำหรับ API เหล่านั้นและไม่ได้รับการสนับสนุนอย่างเป็นทางการ.

ไลบรารีรองรับรูปแบบแลกเปลี่ยนหลัก — OBJ, glTF 2.0 / GLB, STL, 3MF, และ COLLADA ทั้งสำหรับการนำเข้าและส่งออก มีคลาสผู้นำเข้า/ส่งออก FBX อยู่แต่ยังไม่ได้เชื่อมต่อกับการตรวจจับรูปแบบอัตโนมัติ โครงสร้างกราฟซีน API สะท้อนโมเดลที่คุ้นเคยจากเครื่องมือสร้าง 3D: Scene หนึ่งอันถือ rootNode, แต่ละ Node สามารถบรรจุน็อดลูกและอ็อบเจกต์เอนทิตี้ (Mesh, Camera, Light) และลำดับชั้นการแปลงสามารถเข้าถึงได้เต็มที่สำหรับการอ่านและเขียน.

คุณสมบัติหลัก

  • การรับส่งข้อมูลหลายรูปแบบ: นำเข้าและส่งออก OBJ (พร้อมกับ .mtl วัสดุ), glTF 2.0 / GLB, STL (ไบนารีและ ASCII), 3MF, และ COLLADA จากทั้งเส้นทางไฟล์และหน่วยความจำ Buffer วัตถุ. การสนับสนุน FBX ยังไม่ได้เชื่อมต่อกับการตรวจจับอัตโนมัติ.
  • กราฟฉาก API: Scene, Node, Mesh, Camera, Light ลำดับชั้นพร้อมการจัดการพาเรนท์/ชิลด์เต็มรูปแบบ; เดินทางผ่านโหนดแบบเรียกซ้ำโดย node.childNodes
  • ระบบวัสดุ PBR: วัสดุ Lambert, Phong, และ PBR (metallic/roughness) ที่สามารถเข้าถึงได้ผ่าน node.material
  • การดำเนินการเมช: เข้าถึงข้อมูลเวอร์เท็กซ์ดิบผ่าน mesh.controlPoints (อาเรย์ของ Vector4), ดัชนีรูปหลายเหลี่ยมผ่าน mesh.polygonCount, และช่องข้อมูลเวอร์เท็กซ์ผ่าน mesh.getElement()
  • ยูทิลิตี้คณิตศาสตร์: Vector2, Vector3, Vector4, Matrix4, Quaternion, และประเภทกล่องขอบเขตสำหรับการคำนวณเชิงพื้นที่
  • ระบบแอนิเมชัน: การทำแอนิเมชันแบบคีย์เฟรมด้วย AnimationClip, AnimationChannel, และเส้นโค้งการแทรก (linear, Bezier, TCB spline)
  • ตัวเลือกเฉพาะรูปแบบ: ต่อรูปแบบ LoadOptions / SaveOptions คลาสควบคุมการพลิกพิกัด, การปรับสเกล, การโหลดวัสดุ, และอื่น ๆ

เริ่มต้นใช้งาน

สร้างแพ็กเกจจากซอร์ส โหนด.js 18 หรือรุ่นใหม่กว่าจำเป็น; TypeScript 5.0+ แนะนำให้ใช้.

git clone https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-TypeScript.git
cd Aspose.3D-FOSS-for-TypeScript
npm install
npm run build

โหลดไฟล์ OBJ และตรวจสอบฉาก:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.open('model.obj', options);

for (const node of scene.rootNode.childNodes) {
    if (node.entity && 'controlPoints' in node.entity) {
        const mesh = node.entity as any;
        console.log(`Mesh "${node.name}": ${mesh.controlPoints.length} vertices`);
    }
}

กราฟฉาก API

แต่ละฉากเป็นต้นไม้ของอ็อบเจ็กต์ Node ที่มีรากอยู่ที่ scene.rootNode. สร้างลำดับชั้นด้วย addChildNode(), แนบเอนทิตี้เช่น Camera หรือ Light ไปยังโหนดผ่านคุณสมบัติ entity, และอ่านการแปลงของแต่ละโหนดในพื้นที่ท้องถิ่นหรือทั่วโลกผ่าน transform และ globalTransform.

import { Scene, Node, Camera, Light } from '@aspose/3d';

const scene = new Scene();

const cameraNode = new Node('MainCamera');
cameraNode.entity = new Camera('MainCamera');
scene.rootNode.addChildNode(cameraNode);

const lightNode = new Node('KeyLight');
lightNode.entity = new Light('KeyLight');
scene.rootNode.addChildNode(lightNode);

for (const child of scene.rootNode.childNodes) {
    console.log(`${child.name}: ${child.entity?.constructor.name}`);
}

ยูทิลิตี้คณิตศาสตร์

Vector3, Vector4, Matrix4, และ Quaternion รองรับการดำเนินการเชิงเรขาคณิตทุกอย่างในไลบรารี. Vector3 และ Vector4 เปิดเผยส่วนประกอบ x/y/z(/w) พร้อมกับ length, dot(), และ cross(); Matrix4 คือกริด 4×4 ที่เข้าถึงได้ผ่าน m00–m33 ด้วย transpose() และ concatenate(); Quaternion ให้ normalize(), conjugate(), inverse(), และ dot() สำหรับคณิตศาสตร์การหมุน.

import { Vector3, Quaternion, Matrix4 } from '@aspose/3d/utilities';

const position = new Vector3(1.0, 2.0, 3.0);
const rotation = new Quaternion(1.0, 0.0, 0.0, 0.0);
const transform = new Matrix4();

console.log(`length=${position.length} determinant=${transform.determinant}`);
console.log(`rotation w=${rotation.w} x=${rotation.x} y=${rotation.y} z=${rotation.z}`);

ดูเพิ่มเติม

แหล่งข้อมูลที่เกี่ยวข้อง