mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2024-12-29 16:29:40 +00:00
Renamed textures. Reordered textures docs. Added tri_grid texture.
This commit is contained in:
parent
787190c596
commit
457e395f0e
2 changed files with 109 additions and 66 deletions
|
@ -1275,14 +1275,14 @@ function cylinder(h, r1, r2, center, l, r, d, d1, d2, anchor, spin=0, orient=UP)
|
|||
// texture="trunc_pyramids",
|
||||
// tex_size=[5,5], tex_style="convex");
|
||||
//
|
||||
// Example: Texturing with VNF tile "vnf_dots"
|
||||
// Example: Texturing with VNF tile "dots"
|
||||
// cyl(h=40, r1=20, r2=15, rounding=9,
|
||||
// texture="vnf_dots", tex_size=[5,5],
|
||||
// texture="dots", tex_size=[5,5],
|
||||
// tex_samples=6);
|
||||
//
|
||||
// Example: Texturing with VNF tile "vnf_bricks"
|
||||
// Example: Texturing with VNF tile "bricks_vnf"
|
||||
// cyl(h=50, r1=25, r2=20, shift=[0,10], rounding1=-10,
|
||||
// texture="vnf_bricks", tex_size=[10,10],
|
||||
// texture="bricks_vnf", tex_size=[10,10],
|
||||
// tex_scale=0.5, tex_style="concave");
|
||||
//
|
||||
// Example: No Texture Taper
|
||||
|
|
167
skin.scad
167
skin.scad
|
@ -594,10 +594,10 @@ function skin(profiles, slices, refine=1, method="direct", sampling, caps, close
|
|||
// linear_sweep(
|
||||
// rect(50), texture="pyramids", tex_size=[10,10],
|
||||
// h=40, style="convex");
|
||||
// Example: "vnf_bricks" texture.
|
||||
// Example: "bricks_vnf" texture.
|
||||
// path = glued_circles(r=15, spread=40, tangent=45);
|
||||
// linear_sweep(
|
||||
// path, texture="vnf_bricks", tex_size=[10,10],
|
||||
// path, texture="bricks_vnf", tex_size=[10,10],
|
||||
// tex_scale=0.25, h=40);
|
||||
// Example: User defined heightfield texture.
|
||||
// path = ellipse(r=[20,10]);
|
||||
|
@ -817,7 +817,7 @@ function linear_sweep(
|
|||
// rotate_sweep(rgn);
|
||||
// Example:
|
||||
// path = right(50, p=circle(d=40));
|
||||
// rotate_sweep(path, texture="vnf_bricks", tex_size=[10,10], tex_scale=0.5, style="concave");
|
||||
// rotate_sweep(path, texture="bricks_vnf", tex_size=[10,10], tex_scale=0.5, style="concave");
|
||||
// Example:
|
||||
// tex = [
|
||||
// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
|
@ -2464,9 +2464,9 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
|
||||
|
||||
|
||||
// DefineHeader(Table;Headers=Texture Name|Type|Description): Texture Values
|
||||
|
||||
// Section: Texturing
|
||||
// DefineHeader(Table;Headers=Texture Name|Args|Description): Heightfield Textures
|
||||
// DefineHeader(Table;Headers=Texture Name|Args|Description): VNF Textures
|
||||
|
||||
// Function: texture()
|
||||
// Usage:
|
||||
|
@ -2478,29 +2478,29 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
// - VNF Tile textures, which are VNFs that completely tile the rectangle `[0,0]` to `[1,1]`. These tend to be slower to render, but are more precise.
|
||||
// Sometimes the geometry of a shape to be textured will cause a heightfield texture to be badly triangulated.
|
||||
// Switching to a similar VNF tile texture can solve this problem. Usually just by adding the prefix "vnf_".
|
||||
// Heightfield Textures:
|
||||
// "bricks" = `n`, `roughness` = A brick-wall pattern.
|
||||
// "diamonds" = `n` = Diamond shapes with tips aligned with the axes. Useful for knurling.
|
||||
// "hills" = `n` = Wavy sine-wave hills and valleys,
|
||||
// "pyramids" = `n` = Pyramids shapes with flat sides aligned with the axes. Also useful for knurling.
|
||||
// "ribs" = `n` = Vertically aligned triangular ribs.
|
||||
// "rough" = `n`, `roughness` = A pseudo-randomized rough surace texture.
|
||||
// "trunc_pyramids" = `n` = Like "pyramids" but with flattened tips.
|
||||
// "trunc_ribs" = `n` = Like "ribs" but with flat rib tips.
|
||||
// "wave_ribs" = `n` = Vertically aligned wavy ribs.
|
||||
// VNF Textures:
|
||||
// "vnf_bricks" = `inset`, `gap` = Like "bricks", but slower and more consistent in triangulation.
|
||||
// "vnf_checkers" = `inset` = A pattern of alternating checkerboard squares.
|
||||
// "vnf_cones" = `n`, `inset` = Raised conical spikes.
|
||||
// "vnf_cubes" = none = Cornercubes texture.
|
||||
// "vnf_diagonal_grid" = `inset` = A grid of thin lines at 45º angles.
|
||||
// "vnf_diamonds" = none = Like "diamonds", but slower and more consistent in triangulation.
|
||||
// "vnf_dimples" = `n`, `inset` = Small round divots.
|
||||
// "vnf_dots" = `n`, `inset` = Raised small round bumps.
|
||||
// "vnf_hex_grid" = `inset` = A hexagonal grid of thin lines.
|
||||
// "vnf_pyramids" = none = Like "pyramids", but slower and more consistent in triangulation.
|
||||
// "vnf_trunc_pyramids" = `inset` = Like "trunc_pyramids", but slower and more consistent in triangulation.
|
||||
// "vnf_trunc_ribs" = `inset`, `gap` = Like "trunc_ribs", but slower and more adjustable.
|
||||
// Texture Values:
|
||||
// "bricks" = Heightfield = A brick-wall pattern. Giving `n=` sets the number of heightfield samples to `n` by `n`. Giving `roughness=` adds a level of height randomization to add roughness to the texture.
|
||||
// "bricks_vnf" = VNF Tile = Like "bricks", but slower and more consistent in triangulation. Giving `gap=` sets the mortar gap between bricks. Giving `inset=` specifies the inset of the brick tops, relative to their bottoms.
|
||||
// "checkers" = VNF Tile = A pattern of alternating checkerboard squares. Giving `inset=` specifies the inset of the raised checker tile tops, relative to the lowered tiles.
|
||||
// "cones" = VNF Tile = Raised conical spikes. Giving `n=` sets the number of sides to the cone. Giving `inset=` specifies the inset of the base of the cone, relative to the tile edges.
|
||||
// "cubes" = VNF Tile = Cornercubes texture.
|
||||
// "diamonds" = Heightfield = Diamond shapes with tips aligned with the axes. Useful for knurling. Giving `n=` sets the number of heightfield samples to `n` by `n`.
|
||||
// "diamonds_vnf" = VNF Tile = Like "diamonds", but slower and more consistent in triangulation.
|
||||
// "dimples" = VNF Tile = Small round divots. Giving `n=` sets the resolution of the divot curve. Giving `inset=` specifies the inset of the dimples, relative to the edge of the tile.
|
||||
// "dots" = VNF Tile = Raised small round bumps. Giving `n=` sets the resolution of the bump curve. Giving `inset=` specifies the inset of the dots, relative to the edge of the tile.
|
||||
// "hex_grid" = VNF Tile = A hexagonal grid of thin lines. Giving `inset=` specifies the inset of the hex tops, relative to their bottoms.
|
||||
// "hills" = Heightfield = Wavy sine-wave hills and valleys, Giving `n=` sets the number of heightfield samples to `n` by `n`.
|
||||
// "pyramids" = Heightfield = Pyramids shapes with flat sides aligned with the axes. Also useful for knurling. Giving `n=` sets the number of heightfield samples to `n` by `n`.
|
||||
// "pyramids_vnf" = VNF Tile = Like "pyramids", but slower and more consistent in triangulation.
|
||||
// "ribs" = Heightfield = Vertically aligned triangular ribs. Giving `n=` sets the number of heightfield samples to `n` by `1`.
|
||||
// "rough" = Heightfield = A pseudo-randomized rough surace texture. Giving `n=` sets the number of heightfield samples to `n` by `n`. Giving `roughness=` adds a level of height randomization to add roughness to the texture.
|
||||
// "tri_grid" = VNF Tile = A triangular grid of thin lines. Giving `inset=` specifies the inset of the triangle tops, relative to their bottoms.
|
||||
// "trunc_diamonds" = VNF Tile = Truncated diamonds. A grid of thin lines at 45º angles. Giving `inset=` specifies the inset of the truncated diamond tops, relative to their bottoms.
|
||||
// "trunc_pyramids" = Heightfield = Truncated pyramids. Like "pyramids" but with flattened tips. Giving `n=` sets the number of heightfield samples to `n` by `n`.
|
||||
// "trunc_pyramids_vnf" = VNF Tile = Like "trunc_pyramids", but slower and more consistent in triangulation. Giving `inset=` specifies the inset of the truncated pyramid tops, relative to their bottoms.
|
||||
// "trunc_ribs" = Heightfield = Truncated ribs. Like "ribs" but with flat rib tips. Giving `n=` sets the number of heightfield samples to `n` by `1`.
|
||||
// "trunc_ribs_vnf" = VNF Tile = Like "trunc_ribs", but slower and more adjustable. Giving `gap=` sets the bottom gap between ribs. Giving `inset=` specifies the inset of the rib tops, relative to their bottoms.
|
||||
// "wave_ribs" = Heightfield = Vertically aligned wavy ribs. Giving `n=` sets the number of heightfield samples to `n` by `1`.
|
||||
// Arguments:
|
||||
// tex = The name of the texture to get.
|
||||
// ---
|
||||
|
@ -2522,8 +2522,8 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
// tex_scale=3, tex_size=[10,10],
|
||||
// style="concave"
|
||||
// );
|
||||
// Example(3D): "vnf_trunc_ribs" texture. Slower, but more controllable.
|
||||
// tex = texture("vnf_trunc_ribs", gap=0.25, inset=0.333);
|
||||
// Example(3D): "trunc_ribs_vnf" texture. Slower, but more controllable.
|
||||
// tex = texture("trunc_ribs_vnf", gap=0.25, inset=0.333);
|
||||
// linear_sweep(
|
||||
// rect(50), h=40, texture=tex,
|
||||
// tex_scale=3, tex_size=[10,10]
|
||||
|
@ -2540,8 +2540,8 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10], style="concave"
|
||||
// );
|
||||
// Example(3D): "vnf_diamonds" texture. Slower, but more consistent around complex curves.
|
||||
// tex = texture("vnf_diamonds");
|
||||
// Example(3D): "diamonds_vnf" texture. Slower, but more consistent around complex curves.
|
||||
// tex = texture("diamonds_vnf");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10]
|
||||
|
@ -2552,8 +2552,8 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10], style="convex"
|
||||
// );
|
||||
// Example(3D): "vnf_pyramids" texture. Slower, but more consistent around complex curves.
|
||||
// tex = texture("vnf_pyramids");
|
||||
// Example(3D): "pyramids_vnf" texture. Slower, but more consistent around complex curves.
|
||||
// tex = texture("pyramids_vnf");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10]
|
||||
|
@ -2564,8 +2564,8 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10], style="convex"
|
||||
// );
|
||||
// Example(3D): "vnf_trunc_pyramids" texture. Slower, but more consistent around complex curves.
|
||||
// tex = texture("vnf_trunc_pyramids");
|
||||
// Example(3D): "trunc_pyramids_vnf" texture. Slower, but more consistent around complex curves.
|
||||
// tex = texture("trunc_pyramids_vnf");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10]
|
||||
|
@ -2576,20 +2576,20 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10], style="quincunx"
|
||||
// );
|
||||
// Example(3D): "vnf_dots" texture.
|
||||
// tex = texture("vnf_dots");
|
||||
// Example(3D): "dots" texture.
|
||||
// tex = texture("dots");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40, tex_scale=1,
|
||||
// tex_size=[10,10]
|
||||
// );
|
||||
// Example(3D): "vnf_dimples" texture.
|
||||
// tex = texture("vnf_dimples");
|
||||
// Example(3D): "dimples" texture.
|
||||
// tex = texture("dimples");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40, tex_scale=1,
|
||||
// tex_size=[10,10]
|
||||
// );
|
||||
// Example(3D): "vnf_cones" texture.
|
||||
// tex = texture("vnf_cones");
|
||||
// Example(3D): "cones" texture.
|
||||
// tex = texture("cones");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40, tex_scale=3,
|
||||
// tex_size=[10,10]
|
||||
|
@ -2600,26 +2600,32 @@ function associate_vertices(polygons, split, curpoly=0) =
|
|||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10]
|
||||
// );
|
||||
// Example(3D): "vnf_bricks" texture.
|
||||
// tex = texture("vnf_bricks");
|
||||
// Example(3D): "bricks_vnf" texture.
|
||||
// tex = texture("bricks_vnf");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10]
|
||||
// );
|
||||
// Example(3D): "vnf_diagonal_grid" texture.
|
||||
// tex = texture("vnf_diagonal_grid");
|
||||
// Example(3D): "trunc_diamonds" texture.
|
||||
// tex = texture("trunc_diamonds");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10]
|
||||
// );
|
||||
// Example(3D): "vnf_hex_grid" texture.
|
||||
// tex = texture("vnf_hex_grid");
|
||||
// Example(3D): "tri_grid" texture.
|
||||
// tex = texture("tri_grid");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[12.5,20]
|
||||
// );
|
||||
// Example(3D): "vnf_checkers" texture.
|
||||
// tex = texture("vnf_checkers");
|
||||
// Example(3D): "hex_grid" texture.
|
||||
// tex = texture("hex_grid");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[12.5,20]
|
||||
// );
|
||||
// Example(3D): "checkers" texture.
|
||||
// tex = texture("checkers");
|
||||
// linear_sweep(
|
||||
// rect(50), texture=tex, h=40,
|
||||
// tex_size=[10,10]
|
||||
|
@ -2648,7 +2654,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
each repeat(1,n/4),
|
||||
each lerpn(1,0,n/4,endpoint=false),
|
||||
]] :
|
||||
tex=="vnf_trunc_ribs"?
|
||||
tex=="trunc_ribs_vnf"?
|
||||
let(
|
||||
inset = default(inset,1/2),
|
||||
gap = default(gap,1/4)
|
||||
|
@ -2692,7 +2698,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
)
|
||||
],
|
||||
] :
|
||||
tex=="vnf_diamonds"?
|
||||
tex=="diamonds_vnf"?
|
||||
[
|
||||
[
|
||||
[0, 1, 1], [1/2, 1, 0], [1, 1, 1],
|
||||
|
@ -2712,7 +2718,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
1 - (max(abs(i-n/2), abs(j-n/2)) / (n/2))
|
||||
]
|
||||
] :
|
||||
tex=="vnf_pyramids"?
|
||||
tex=="pyramids_vnf"?
|
||||
[
|
||||
[ [0,1,0], [1,1,0], [1/2,1/2,1], [0,0,0], [1,0,0] ],
|
||||
[ [2,0,1], [2,1,4], [2,4,3], [2,3,0] ]
|
||||
|
@ -2726,7 +2732,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
(1 - (max(n/6, abs(i-n/2), abs(j-n/2)) / (n/2))) * 1.5
|
||||
]
|
||||
] :
|
||||
tex=="vnf_trunc_pyramids"?
|
||||
tex=="trunc_pyramids_vnf"?
|
||||
let(
|
||||
inset = default(inset,0.25)
|
||||
) [
|
||||
|
@ -2763,7 +2769,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
(x+even) % n <= max(1,n/16)? 0 : 0.5
|
||||
]
|
||||
] :
|
||||
tex=="vnf_bricks"?
|
||||
tex=="bricks_vnf"?
|
||||
let(
|
||||
inset = default(inset,0.05),
|
||||
gap = default(gap,0.05)
|
||||
|
@ -2788,7 +2794,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
[ 7,11,10], [ 7,10, 6],
|
||||
]
|
||||
] :
|
||||
tex=="vnf_checkers"?
|
||||
tex=="checkers"?
|
||||
let(
|
||||
inset = default(inset,0.05)
|
||||
) [
|
||||
|
@ -2813,7 +2819,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
[11,12,28], [12,23,28], [11,28,22], [23,22,28],
|
||||
]
|
||||
] :
|
||||
tex=="vnf_cones"?
|
||||
tex=="cones"?
|
||||
let(
|
||||
n = quant(default(n,12),4),
|
||||
inset = default(inset,0)
|
||||
|
@ -2830,7 +2836,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
if (inset > 0) for (i = [0:1:3]) [i+n+1, (i+1)%4+n+1, ((i+1)*n/4)%n],
|
||||
]
|
||||
] :
|
||||
tex=="vnf_cubes"?
|
||||
tex=="cubes"?
|
||||
[
|
||||
[
|
||||
[0,1,1/2], [1,1,1/2], [1/2,5/6,1], [0,4/6,0], [1,4/6,0],
|
||||
|
@ -2842,7 +2848,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
[9,6,8], [10,9,8],
|
||||
]
|
||||
] :
|
||||
tex=="vnf_diagonal_grid"?
|
||||
tex=="trunc_diamonds"?
|
||||
let(
|
||||
inset = default(inset,0.1)
|
||||
)
|
||||
|
@ -2860,7 +2866,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
[4,5,6], [4,6,7],
|
||||
]
|
||||
] :
|
||||
tex=="vnf_dimples" || tex=="vnf_dots" ?
|
||||
tex=="dimples" || tex=="dots" ?
|
||||
let(
|
||||
n = quant(default(n,16),4),
|
||||
inset = default(inset,0.05)
|
||||
|
@ -2869,7 +2875,7 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
let(
|
||||
rows=ceil(n/4),
|
||||
r=adj_ang_to_hyp(1/2-inset,45),
|
||||
dots = tex=="vnf_dots",
|
||||
dots = tex=="dots",
|
||||
cp = [1/2, 1/2, r*sin(45)*(dots?-1:1)],
|
||||
sc = 1 / (r - abs(cp.z)),
|
||||
uverts = [
|
||||
|
@ -2892,7 +2898,44 @@ function texture(tex, n, inset, gap, roughness) =
|
|||
if (inset>0) for (i=[0:3]) [i, (i+1)%4, 4+(i+1)%4*n/4]
|
||||
]
|
||||
) [verts, faces] :
|
||||
tex=="vnf_hex_grid"?
|
||||
tex=="tri_grid"?
|
||||
let(
|
||||
inset = default(inset,0.1),
|
||||
aspect = 1 / adj_ang_to_opp(1,60),
|
||||
adj = opp_ang_to_adj(inset, 30),
|
||||
hyp = opp_ang_to_hyp(inset, 30),
|
||||
y1 = inset * aspect,
|
||||
y2 = adj * aspect,
|
||||
y3 = 0.5 - inset * aspect,
|
||||
y4 = 0.5 + inset * aspect,
|
||||
y5 = 1 - adj * aspect,
|
||||
y6 = 1 - inset * aspect
|
||||
)
|
||||
assert(inset>0 && inset<0.5)
|
||||
[
|
||||
[
|
||||
[0,0,0], [1,0,0],
|
||||
[adj,y1,1], [1-adj,y1,1],
|
||||
[0,y2,1], [1,y2,1],
|
||||
[0.5,0.5-adj*aspect,1],
|
||||
[0,y3,1], [0.5-adj,y3,1], [0.5+adj,y3,1], [1,y3,1],
|
||||
[0,0.5,0], [0.5,0.5,0], [1,0.5,0],
|
||||
[0,y4,1], [0.5-adj,y4,1], [0.5+adj,y4,1], [1,y4,1],
|
||||
[0.5,0.5+adj*aspect,1],
|
||||
[0,y5,1], [1,y5,1],
|
||||
[adj,y6,1], [1-adj,y6,1],
|
||||
[0,1,0], [1,1,0],
|
||||
], [
|
||||
[0,2,3], [0,3,1], [2,6,3], [0,12,2], [2,12,6], [3,6,12], [3,12,1],
|
||||
[0,4,8], [0,8,12], [4,7,8], [7,11,12], [7,12,8],
|
||||
[1,12,9], [1,9,5], [5,9,10], [9,12,13], [9,13,10],
|
||||
[11,14,15], [11,15,12], [19,15,14], [19,23,12], [19,12,15],
|
||||
[12,16,13], [16,17,13], [16,20,17], [12,24,20], [12,20,16],
|
||||
[21,22,18], [21,23,24], [21,24,22], [12,23,21], [12,21,18],
|
||||
[12,18,22], [12,22,24],
|
||||
]
|
||||
] :
|
||||
tex=="hex_grid"?
|
||||
let(
|
||||
inset=default(inset,0.1)
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue