728x90
반응형
물리엔진에서의 Material은 그 물체의 재질을 결정한다. cannon.js의 Contact Material은 특정 Material끼리 부딪혔을 때의 물리연산을 결정한다.
// Contact Material
const defaultMaterial = new CANNON.Material('default');
const rubberMaterial = new CANNON.Material('rubber');
const ironMaterial = new CANNON.Material('iron');
const defaultContactMaterial = new CANNON.ContactMaterial(
defaultMaterial,
defaultMaterial,
{
friction: 0.5,
restitution: 0.5
}
);
cannonWorld.defaultContactMaterial = defaultContactMaterial;
const rubberDefaultContactMaterial = new CANNON.ContactMaterial(
rubberMaterial,
defaultMaterial,
{
friction: 0.5,
restitution: 0.7,
}
);
cannonWorld.addContactMaterial(rubberDefaultContactMaterial);
const ironDefaultContactMaterial = new CANNON.ContactMaterial(
ironMaterial,
defaultMaterial,
{
friction: 0.5,
restitution: 0,
}
);
cannonWorld.addContactMaterial(ironDefaultContactMaterial);
위 코드를 보면 cannon.js의 material객체로 여러 종류의 material을 설정하였다.
Contact Material을 생성할 때 어떤 두 Material이 부딪혔을 때, 마찰과 반발이 얼마나 적용될 지를 설정할 수 있다.
생성한 Contact Material을 world의 default로 설정 혹은 추가하여 재질에 따른 물리연산을 설정할 수 있다.
unity engine에서 physics material을 설정하는 것과 비슷한 기능으로 보인다.
const floorShape = new CANNON.Plane();
const floorBody = new CANNON.Body({
mass: 0,
position: new CANNON.Vec3(0,0,0),
shape: floorShape,
material: defaultMaterial,
});
floorBody.quaternion.setFromAxisAngle(
new CANNON.Vec3(-1, 0, 0),
Math.PI / 2
);
cannonWorld.addBody(floorBody);
const sphereShape = new CANNON.Sphere(0.5);
const sphereBody = new CANNON.Body({
mass: 1,
position: new CANNON.Vec3(0, 10, 0),
shape: sphereShape,
material: ironMaterial,
});
cannonWorld.addBody(sphereBody);
Body를 생성할 때 material을 지정해주어야 적용된다. (material은 default로 설정되지 않는다)
728x90
반응형
'개발 · 컴퓨터공학' 카테고리의 다른 글
three.js 커스텀 오브젝트 생성 이벤트 만들기 (0) | 2022.10.20 |
---|---|
three.js body에 힘 가하기 (applyForce) (0) | 2022.10.19 |
three.js cannon.js로 물리 시뮬레이션 적용하기 (0) | 2022.10.17 |
three.js 물리엔진 라이브러리 cannon.js (0) | 2022.10.14 |
three.js glb / gltf 모델 load하여 애니메이션 적용하기 (0) | 2022.10.13 |