From partme-ai-full-stack-skills
Manages three.js scene graph objects including Object3D hierarchies, Groups, Meshes (InstancedMesh, SkinnedMesh, BatchedMesh), Raycaster picking, layers masks, and EventDispatcher for building scenes and interactions.
npx claudepluginhub partme-ai/full-stack-skills --plugin t2ui-skillsThis skill uses the workspace's default tool permissions.
**ALWAYS use this skill when the user mentions:**
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
ALWAYS use this skill when the user mentions:
position/rotation/scale, matrixAutoUpdate, updateMatrixWorldRaycaster.setFromCamera, intersectObjects, recursive flag, face/uv resultsIMPORTANT: objects vs math
| Need | Skill |
|---|---|
| Scene graph + picking | threejs-objects |
| Box/ray math only | threejs-math |
Trigger phrases include:
Group and transforms; minimize deep hierarchies where possible.count and frustum culling behavior.EventDispatcher on custom objects; patterns only, not DOM frameworks.ClippingGroup usage per docs when user needs sectional cuts.dispose() on geometries/materials/textures when removing objects permanently.import * as THREE from 'three';
const raycaster = new THREE.Raycaster();
const pointer = new THREE.Vector2();
function onPointerMove(event) {
// Normalize device coordinates (-1 to +1)
pointer.x = (event.clientX / window.innerWidth) * 2 - 1;
pointer.y = -(event.clientY / window.innerHeight) * 2 + 1;
}
function pick(camera, scene) {
raycaster.setFromCamera(pointer, camera);
const intersections = raycaster.intersectObjects(scene.children, true);
// Validate: intersections are sorted by distance (nearest first)
if (intersections.length > 0) {
console.log('Nearest hit:', intersections[0].object.name,
'at distance:', intersections[0].distance);
}
return intersections;
}
See examples/workflow-raycaster-pick.md.
| Docs section | Representative links |
|---|---|
| Core | https://threejs.org/docs/Object3D.html |
| Objects | https://threejs.org/docs/Mesh.html |
| Objects | https://threejs.org/docs/InstancedMesh.html |
| Core | https://threejs.org/docs/Raycaster.html |
updateMatrixWorld before world-space ray tests on moved objects.layers set picks unintended objects—set masks consistently on camera and objects.Object3D, mesh types, Raycaster, and Layers are documented under Objects and Core in three.js docs. Behavior of picking and layers can shift slightly—link the exact page for the user’s three.js line.
When answering under this skill, prefer responses that:
Object3D, Mesh, InstancedMesh, Raycaster, or Layers as needed.dispose() for geometries/materials when removing objects permanently.English: object3d, mesh, instancedmesh, skinnedmesh, raycaster, layers, scene graph, three.js
中文: 场景图、Object3D、Mesh、实例化、骨骼网格、射线拾取、图层、three.js