• Models
  • Contests
  • Slicer
  • Login
  • Start Here
    thingiverse-iconprintables-iconcults3d-iconmakerworld-iconmyminifactory-icon

    3D GO

    3D ModelsContestsCollectionsSaved ModelsOn a mobile device?

3D GO

Privacy Policy
3D Ambigram Dual Text 3D Printer File Image 1
3D Ambigram Dual Text 3D Printer File Thumbnail 1

3D Ambigram Dual Text

bellissimo avatarbellissimo

August 25, 2025

makerworld-icon
DescriptionCommentsTags

Description

Latest revision added new parameters and colors selection


I created this model generator to practice and get more familiar with OpenSCAD.

 

I’ve always been fascinated by 3D ambigrams, so I wanted to explore how they are made. I started with a single letter

letter1 = "S";
letter2 = "M";
size  = 40;
font = "Overpass Mono:style=Bold";

intersection() {
  //letter1
  linear_extrude(center = true)
          text(letter1, size = size, font = font, halign = "center", valign = "center");
  
  //letter2
  rotate([0, 90, 0])
      linear_extrude(center = true)
          text(letter2, size = size, font = font, halign = "center", valign = "center");
}

 

 

And gradually worked my way up to creating a simple word, such as:

string1 = "LOVE";
string2 = "HATE";
size  = 30;
font = "Overpass Mono:style=Bold";

rotate([90, 0, 0])
  for (i = [0 : min(len(string1), len(string2)) - 1])
      translate([i * size, 0, 0])
          intersection() {           
              // string1
              rotate([0, -45, 0])
                  linear_extrude(height = size, center = true)
                      text(string1[i], size = size, font = font, halign = "center", valign = "center");
              
              // string2
              rotate([0, 45, 0])
                  linear_extrude(height = size, center = true)
                      text(string2[i], size = size, font = font, halign = "center", valign = "center");
          }

 

 

Step by step I added more parameters, a base, and other refinements, while keeping it simple.

The full source code is included so everyone can experiment and generate their own custom models.

string1 = "LOVE";
string2 = "HATE";
angle = 45;
font = "Overpass Mono:style=Bold";
size  = 30;
spacing = 1.1;
baseThickness = 3;
baseRound = 20;

step = size * spacing;
nChars = min(len(string1), len(string2));
modelLength = (nChars - 1) * step + size;
baseR = min(baseRound, (size / 2) - 0.01);

module letterChar(char, tilt = [0, 0, 0]){
   upperChar = (ord(char) >= 97 && ord(char) <= 122) ? chr(ord(char) - 32) : char;
   rotate(tilt)
       linear_extrude(height = 2 * size, center = true)
           text(upperChar, size = size, font = font, halign = "center", valign = "baseline");
}

translate([-(nChars - 1) * step / 2, 0, baseThickness])
   rotate([90, 0, 0])
   for (i = [0 : nChars - 1])
       translate([i * step, 0, 0])
           intersection() {
               translate([-size/2, 0, -size/2])
                   cube(size);
               letterChar(string1[i], [0, -angle, 0]);
               letterChar(string2[i], [0,  angle, 0]);
           }

linear_extrude(height = baseThickness)
   offset(r = baseR)
       square([(modelLength + size / 2) - 2 * baseR, size - 2 * baseR], center = true);

 

Click che “Customize” button and generate your unique model:

 

License:

BY

Related Models

#3DBenchy - The jolly 3D printing torture-test by CreativeTools.se preview image

#3DBenchy - The jolly 3D printing torture-test by CreativeTools.se

CreativeTools profile image

CreativeTools

90,912

Sweeping 2-line name plate preview image

Sweeping 2-line name plate

Makkuro profile image

Makkuro

3,697

Disney Font Customizable Tag  preview image

Disney Font Customizable Tag

Canale profile image

Canale

2,154

V29 preview image

V29

jzisa profile image

jzisa

81,402

Sliding Pill Box (textured organizer for weekly medication) preview image

Sliding Pill Box (textured organizer for weekly medication)

GlennovitS 3D profile image

GlennovitS 3D

2,673

Name Keychain Generator [NO AMS] preview image

Name Keychain Generator [NO AMS]

Pumpkin Studios profile image

Pumpkin Studios

5,151

All In One 3D Printer test preview image

All In One 3D Printer test

majda107 profile image

majda107

64,498

HSW sliding box collection preview image

HSW sliding box collection

DennisP profile image

DennisP

2,208