Урок: создаем игральную кость в OpenScad

dice

Этот код создает стандартную шестигранную игральную кость с правильным расположением точек на гранях (сумма противоположных граней всегда равна 7). Вы можете настроить размер кости, радиус и глубину точек, а также радиус скругления углов, изменяя соответствующие параметры в начале кода.

Для 3D-печати эта модель хорошо подходит, так как имеет гладкие скругленные углы и четкие углубления для точек.

OpenScad скрипт создания игральной кости

// Параметры игральной кости
size = 20;          // Размер кости
dot_radius = 1.5;   // Радиус точек
dot_depth = 1;      // Глубина углублений точек
corner_radius = 2;  // Радиус скругления углов

module rounded_cube(size, r) {
    minkowski() {
        cube([size-r*2, size-r*2, size-r*2], center=true);
        sphere(r=r);
    }
}

module die(size) {
    difference() {
        // Основная форма кости
        rounded_cube(size, corner_radius);
        
        // Грань 1 (одна точка)
        translate([0, 0, size/2 - dot_depth/2])
            cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
        
        // Грань 6 (противоположная грань 1)
        for (x = [-size/4, size/4]) {
            for (y = [-size/4, 0, size/4]) {
                translate([x, y, -size/2 + dot_depth/2])
                    cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
            }
        }
        
        // Грань 2
        translate([size/2 - dot_depth/2, 0, 0])
        rotate([0, 90, 0]) {
            translate([size/4, size/4, 0])
                cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
            translate([-size/4, -size/4, 0])
                cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
        }
        
        // Грань 5 (противоположная грань 2)
        translate([-size/2 + dot_depth/2, 0, 0])
        rotate([0, 90, 0]) {
            for (x = [-size/4, size/4]) {
                for (y = [-size/4, size/4]) {
                    translate([x, y, 0])
                        cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
                }
            }
            translate([0, 0, 0])
                cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
        }
        
        // Грань 3
        translate([0, size/2 - dot_depth/2, 0])
        rotate([90, 0, 0]) {
            translate([0, 0, 0])
                cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
            translate([size/4, size/4, 0])
                cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
            translate([-size/4, -size/4, 0])
                cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
        }
        
        // Грань 4 (противоположная грань 3)
        translate([0, -size/2 + dot_depth/2, 0])
        rotate([90, 0, 0]) {
            for (x = [-size/4, size/4]) {
                for (y = [-size/4, size/4]) {
                    translate([x, y, 0])
                        cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
                }
            }
        }
    }
}

// Создаем игральную кость
die(size);

Пояснения к коду

Код создает шестигранную игральную кость с помощью OpenSCAD. Вот подробное объяснение структуры:

  1. Параметры:
    • size – размер кости (длина ребра)
    • dot_radius – радиус точек на гранях
    • dot_depth – глубина выдавливания точек
    • corner_radius – радиус скругления углов кости
  2. Основная структура:
    • Сначала создается базовая кубическая форма со скругленными углами
    • Затем на каждой грани создаются точки путем вычитания цилиндров
    • Для каждой грани используется подходящее расположение точек (1-6)
  3. Расположение точек:
    • Грань 1: одна точка в центре
    • Грань 2: две точки по диагонали
    • Грань 3: три точки (одна в центре, две по диагонали)
    • Грань 4: четыре точки по углам
    • Грань 5: пять точек (четыре по углам, одна в центре)
    • Грань 6: шесть точек (два ряда по три)

Базовая форма кости создается при помощи функции minkowski() ;

module rounded_cube(size, r) {
    minkowski() {
        cube([size-r*2, size-r*2, size-r*2], center=true);
        sphere(r=r);
    }
}
Урок: создаем игральную кость в OpenScad

Возможные модификации

Добавление текстурирования поверхности:

module textured_die(size) {difference() {
        die(size);
        // Добавляем тонкую текстуру поверхностиfor(i = [0:100]) {
            for(j = [0:100]) {
                rotate([rands(0,360,1)[0],rands(0,360,1)[0],rands(0,360,1)[0]])
                translate([rands(-size/2,size/2,1)[0], rands(-size/2,size/2,1)[0], size/2])
                cylinder(h=0.05, r=0.1, $fn=3);
            }
        }
    }
}
Урок: создаем игральную кость в OpenScad
Модифицированная игральная кость, с мелкими выщербинками

Создание кости с альтернативным числом граней (например, 8-гранная кость):

module d8(size) {
    difference() {
        // Октаэдр (8-гранная кость)
        polyhedron(
            points = [
                [size/2, 0, 0], [-size/2, 0, 0], [0, size/2, 0],
                [0, -size/2, 0], [0, 0, size/2], [0, 0, -size/2]
            ],
            faces = [
                [0, 2, 4], [2, 1, 4], [1, 3, 4], [3, 0, 4],
                [0, 2, 5], [2, 1, 5], [1, 3, 5], [3, 0, 5]
            ]
        );
        
        // Добавление точек (упрощенный пример)
        for (i = [1:8]) {
            // Здесь нужно добавить точки для каждой грани
        }
    }
}

Добавление полого внутреннего пространства для уменьшения количества материала:

module hollow_die(size, wall_thickness) {
    difference() {
        die(size);
        // Создание полого внутреннего пространства
        cube(size - 2*wall_thickness, center=true);
    }
}

Создание набора костей разных размеров:

module dice_set() {
    translate([0, 0, 0])
        die(20); // d6 размером 20
    
    translate([30, 0, 0])
        die(15); // d6 размером 15
    
    translate([0, 30, 0])
        die(10); // d6 размером 10
}

Советы по 3D-печати игральных костей

  1. Ориентация при печати:
    • Печатайте кость, расположив её на углу (на трёх гранях), чтобы минимизировать необходимость поддержек.
    • Такая ориентация также даст более равномерные свойства по всем направлениям.
  2. Заполнение:
    • Используйте высокий процент заполнения (около 50-70%) для обеспечения равномерного веса.
    • Если хотите создать особенно тяжелую кость, можно увеличить заполнение до 90-100%.
  3. Баланс:
    • Для игральных костей критически важен баланс. Убедитесь, что кость имеет равномерное распределение веса.
    • Если печатаете полую кость, используйте равномерную толщину стенок.
  4. Материалы:
    • PLA подходит для базовых костей
    • PETG даст большую прочность
    • Для высококачественных костей рассмотрите возможность использования смол для SLA/DLP печати
  5. Постобработка:
    • Шлифовка поможет сделать поверхности более гладкими
    • Покраска точек контрастным цветом улучшит читаемость
    • Можно нанести лак для защиты поверхности и придания глянца

Этот проект отлично подходит для настройки под личные предпочтения, и вы можете создать уникальный дизайн костей для настольных игр!

Оцените статью
( Пока оценок нет )
Добавить комментарии

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Урок: создаем игральную кость в OpenScad
Шпаргалка (cheat-sheet) со списком основных команд OpenSCAD