열심히 공부했더니 배가 살짝 고파지네요. 그래서 이번 시간에는 간단한 빵 모양을 함께 만들어 보려고 합니다. 오늘 만들 빵은 둥근 공을 양옆으로 늘리고 밑면을 평평하게 잘라낸 모양입니다. 이 과정을 코드로 구현하며 물체의 크기를 조절하는 `scale` 명령어를 배워보겠습니다.
1. 새로운 명령어: 크기를 조절하는 `scale`
scale은 마치 고무찰흙을 특정 방향으로 늘리거나 누르는 것처럼, 물체의 크기를 조절하는 명령어입니다. { } 괄호 안에 있는 모든 물체에 영향을 줍니다.
기본 형태:
scale([x, y, z]) { 만들고 싶은 물체; }
[x, y, z] 안의 숫자들은 각 축의 배율을 의미합니다.
- x축: 좌우 방향
- y축: 앞뒤 방향
- z축: 위아래 방향
scale의 기본값은 scale([1, 1, 1])으로, 아무런 크기 변화가 없는 상태입니다. 각 숫자를 바꿔보면 다음과 같이 변합니다.
scale([2, 1, 1]): x축, 즉 좌우 방향으로만 2배 길어집니다. 동그란 공이 좌우로 길쭉한 럭비공 모양이 됩니다.scale([1, 2, 1]): y축, 즉 앞뒤 방향으로만 2배 길어집니다.scale([1, 1, 2]): z축, 즉 위아래 방향으로만 2배 길어집니다.scale([2, 0.5, 1]): 좌우로는 2배 길어지고, 앞뒤로는 0.5배(절반)로 납작해집니다.
이처럼 scale을 사용하면 우리가 원하는 비율로 물체의 형태를 자유자재로 바꿀 수 있습니다.
2. 복습: 상자 만들기 `cube`
빵의 밑면을 잘라낼 칼 역할을 할 cube에 대해 복습해 보겠습니다.
기본 형태:
cube(크기);
cube([가로, 세로, 높이]);
예를 들어, cube(10);은 모든 변의 길이가 10인 정육면체를, cube([10, 20, 5]);는 가로(x) 10, 세로(y) 20, 높이(z) 5인 직육면체를 만듭니다.
여기서 중요한 속성은 center=true 입니다.
center=true가 없으면: 상자의 한쪽 꼭짓점이 원점(0, 0, 0)에 위치합니다.center=true를 추가하면: 상자의 정중앙이 원점(0, 0, 0)에 위치하게 됩니다. 물체의 중심을 기준으로 작업할 때 매우 유용합니다.
3. 실습: `scale`과 `cube`로 빵 만들기
자, 이제 배운 내용을 종합해서 빵을 만들어 보겠습니다. 전체 코드를 먼저 살펴보고, 한 줄 한 줄 그 의미를 자세히 파헤쳐 보겠습니다.
// 3D 모델의 표면을 부드럽게 표현하기 위한 설정입니다.
$fn = 100;
// 빵의 치수를 변수로 만들어두면 나중에 모양을 바꾸기 쉽습니다.
bread_radius = 20; // 빵의 기본이 되는 구의 반지름
bread_length_ratio = 2.5; // 빵을 좌우로 늘릴 비율 (2.5배)
bread_height_ratio = 0.8; // 빵을 위아래로 납작하게 만들 비율 (0.8배)
// difference()는 첫 번째 물체에서 나머지 물체들을 빼는, '깎아내기' 작업입니다.
difference() {
// 1단계: 빵의 기본 덩어리 만들기 (재료)
// 구(sphere)를 만든 후, scale을 이용해 모양을 변형시킵니다.
scale([bread_length_ratio, 1, bread_height_ratio])
sphere(r = bread_radius);
// 2단계: 빵의 밑면을 잘라낼 거대한 상자 만들기 (깎는 도구)
// 이 상자는 빵보다 훨씬 커야 확실하게 잘라낼 수 있습니다.
// 또한, 빵의 아랫부분과 겹치도록 위치를 아래로 이동시켜야 합니다.
translate([0, 0, -bread_radius])
cube([150, 80, 40], center = true);
}
코드 상세 설명
코드가 실행되는 순서를 상상하며 따라와 보세요.
-
difference() { ... }(깎아낼 준비)가장 바깥의
difference()는 "이제부터 깎아내는 작업을 할 거야"라고 선언하는 것과 같습니다. 이 괄호 안의 첫 번째 물체가 재료가 되고, 두 번째부터는 모두 칼이나 끌 같은 도구가 됩니다. -
1단계: 빵 덩어리 만들기 (재료)
scale([2.5, 1, 0.8]) sphere(r = 20);
먼저 반지름 20의 완벽한 구(sphere)를 만들고,scale명령으로 x축(좌우)으로 2.5배, z축(위아래)으로 0.8배 크기를 조절합니다. 그 결과, 좌우로 길쭉하고 살짝 눌린 빵 덩어리 모양이 완성됩니다. -
2단계: 밑면을 자를 상자 만들기 (도구)
translate([0, 0, -20]) cube([150, 80, 40], center = true);
먼저 빵보다 훨씬 큰 직육면체(cube)를 원점 중앙에 만듭니다. 이 상자는 빵의 한가운데를 관통하고 있으므로, 빵의 '아랫부분'만 잘라내기 위해translate를 사용해 아래로(z축 -20만큼) 이동시킵니다. 빵의 원래 반지름이 20이었기 때문에, 상자의 윗면이 빵의 아래쪽 절반과 정확히 겹치게 됩니다. -
최종 작업: 깎아내기
difference()는 1단계의 '길쭉한 빵 덩어리'에서 2단계의 '아래로 이동한 거대 상자'가 차지하는 부분을 깨끗하게 도려냅니다. 그 결과, 빵의 밑면이 평평하게 잘려 안정적으로 바닥에 놓을 수 있는 최종 빵 모양이 완성됩니다.