← NaturalezaObjeto 3Dfogon/naranjo
Naranjo
Arrastrá para girarlo// «Naranjo» · gpt-6-sol (medium)
// A small citrus tree: short brown trunk and a dense rounded dark green crown full of bright orange oranges, a few white blossoms too.
// Short, sturdy trunk and spreading roots.
cylinder(24, 24, 0, 4, 6, "#95602f");
cylinder(24, 24, 5, 3, 19, "#a76d35");
for (const [x, y] of [[19, 23], [29, 24], [23, 19], [25, 29]]) {
line(24, 24, 5, x, y, 0, 1.5, "#875329");
}
line(22, 21, 3, 22, 21, 17, 0, "#704622");
line(26, 21, 6, 26, 21, 19, 0, "#704622");
line(24, 27, 2, 24, 27, 13, 0, "#794b26");
set(26, 21, 12, "#754724");
set(26, 21, 13, "#754724");
// Thick branches peek out beneath the leaves.
line(24, 24, 19, 14, 22, 26, 2, "#92602e");
line(24, 24, 20, 35, 25, 27, 2, "#92602e");
line(24, 24, 21, 24, 14, 27, 2, "#92602e");
// One solid, rounded canopy with gently uneven edges.
ellipsoid(24, 24, 29, 16, 15, 11, "#238c3b");
ellipsoid(13, 23, 26, 7, 8, 8, "#238c3b");
ellipsoid(35, 25, 27, 7, 8, 8, "#238c3b");
ellipsoid(23, 14, 26, 11, 7, 8, "#238c3b");
ellipsoid(26, 33, 28, 11, 7, 8, "#238c3b");
ellipsoid(20, 22, 35, 9, 9, 6, "#238c3b");
// Sunlit tops, shaded undersides, and restrained leafy variation.
forEach((x, y, z, color) => {
if (color !== "#238c3b") return;
const n = rand();
let shade = z < 24 ? "#187332" : z > 34 ? "#39b64b" : "#269642";
if (n < 0.075) shade = z > 31 ? "#51c95c" : "#32aa47";
else if (n > 0.93) shade = "#176d32";
set(x, y, z, shade);
});
// Small rounded clusters break up the canopy silhouette.
for (const [x, y, z, r, c] of [
[10, 19, 30, 2.5, "#2da044"], [17, 11, 31, 2.6, "#2c9e43"],
[29, 10, 29, 2.7, "#279440"], [38, 17, 31, 2.5, "#32a748"],
[39, 29, 27, 2.2, "#248e3c"], [33, 35, 33, 2.6, "#36ae49"],
[17, 31, 36, 2.5, "#3ab64c"], [26, 21, 40, 1.8, "#49c257"]
]) sphere(x, y, z, r, c);
// Oranges sit on the outer foliage, especially the viewer-facing side.
const fruit = [
[12, 16, 27, 1.8], [17, 10, 26, 1.8], [22, 8, 28, 2],
[29, 9, 25, 1.8], [35, 13, 28, 2], [39, 19, 25, 1.7],
[11, 23, 22, 1.8], [15, 14, 34, 1.7], [22, 12, 34, 1.9],
[29, 12, 33, 1.8], [36, 20, 34, 1.7], [32, 17, 21, 1.8],
[23, 14, 20, 1.8], [16, 19, 20, 1.6], [10, 27, 28, 1.7],
[15, 30, 34, 1.7], [22, 22, 39, 1.7], [30, 27, 38, 1.8],
[37, 30, 29, 1.8], [27, 36, 30, 1.7], [19, 35, 25, 1.8]
];
for (const [x, y, z, r] of fruit) {
sphere(x, y, z, r, "#ff9822");
set(x, y - 1, z, "#ffb238");
set(x, y, z + 1, "#ffc04a");
set(x, y, z + 2, "#367e32"); // tiny green calyx
}
// A few crisp white blossoms with warm yellow centers.
for (const [x, y, z] of [
[14, 12, 29], [26, 9, 31], [33, 11, 25],
[19, 12, 23], [38, 23, 31], [12, 24, 34],
[25, 17, 39], [32, 33, 36]
]) {
const front = y - 1;
set(x - 1, front, z, "#fff9e9");
set(x + 1, front, z, "#fff9e9");
set(x, front, z - 1, "#fffdf2");
set(x, front, z + 1, "#fffdf2");
set(x, front - 1, z, "#ffd95e");
}import { draw } from "./assets/voxel";
import { naranjo } from "./assets/naranjo";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, naranjo, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add naranjo
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["naranjo"] })
# Queda en client/assets/naranjo.ts
# https://fogon.page/object/naranjo