← Antiguo y prehistoriaObjeto 3Dfogon/estatua-griega
Estatua griega
Arrastrá para girarlo// «Estatua griega» · gpt-6-sol (medium)
// A white marble statue of a Greek figure in a draped toga standing in a relaxed pose with one arm raised holding a laurel wreath, on a square grey pedestal. Smooth marble in white and pale grey shades with soft shadows in the folds.
// Grey stone pedestal, broad enough to anchor the statue.
box(10, 12, 0, 38, 36, 2, "#777b80");
box(11, 13, 3, 37, 35, 4, "#999da1");
box(10, 12, 5, 38, 36, 7, "#b5b7b8");
box(11, 13, 7, 37, 35, 7, "#d0d0cb");
// Crisp mouldings and a simple Greek-inspired border on the front.
box(10, 11, 1, 38, 11, 1, "#a4a6a6");
box(10, 11, 5, 38, 11, 5, "#e0ded6");
for (let x = 13; x <= 35; x += 4) {
box(x, 12, 3, x + 2, 12, 3, "#d1d0c9");
set(x, 12, 4, "#d1d0c9");
set(x + 2, 12, 2, "#646a70");
}
// Feet emerging beneath the drapery.
ellipsoid(20, 22, 9, 2, 3, 2, "#d8d6cf");
ellipsoid(27, 20, 9, 2, 3, 2, "#e8e5dd");
ellipsoid(20, 19, 8, 2, 3, 1, "#f2f0e9");
ellipsoid(27, 17, 8, 2, 3, 1, "#f2f0e9");
// Full, solid marble skirt and torso.
ellipsoid(23, 24, 17, 7, 5, 9, "#e6e4dd");
ellipsoid(23, 24, 24, 6, 4, 7, "#eeeae2");
ellipsoid(24, 24, 13, 6, 5, 4, "#dad8d2");
ellipsoid(21, 24, 18, 5, 4, 8, "#f1eee7");
ellipsoid(24, 23, 25, 5, 4, 5, "#f6f3eb");
// Subtle mottling, confined to the large marble surfaces.
forEach((x, y, z, color) => {
if (z > 9 && color === "#e6e4dd" && rand() < 0.055)
set(x, y, z, "#d9d8d2");
if (z > 18 && color === "#eeeae2" && rand() < 0.045)
set(x, y, z, "#dddcd5");
});
// Long, readable shadowed channels in the toga folds.
const folds = [
[17, 22, 11, 20], [19, 20, 10, 23], [22, 19, 10, 25],
[25, 19, 10, 23], [28, 21, 11, 20]
];
for (const [x, y, low, high] of folds) {
line(x, y, low, x + (x < 23 ? 1 : -1), y, high, 0, "#c6c5c0");
line(x + 1, y - 1, low + 1, x + 1, y - 1, high - 2, 0, "#faf8f0");
}
line(17, 22, 10, 29, 23, 10, 0, "#c5c3bd");
line(18, 21, 11, 29, 22, 11, 0, "#f8f6ee");
// Draped diagonal fold across the chest, with a dark underside.
line(18, 20, 29, 27, 19, 21, 2, "#cfcec8");
line(18, 19, 30, 27, 18, 22, 1, "#faf8f1");
line(17, 21, 28, 19, 20, 30, 2, "#f5f3ec");
// Neck, uncovered shoulder, and relaxed arm at the figure's side.
cylinder(23, 23, 28, 2, 5, "#dedbd4");
ellipsoid(28, 23, 28, 3, 3, 3, "#eeeae2");
line(18, 23, 28, 15, 22, 23, 2, "#e2dfd7");
line(15, 22, 23, 15, 20, 17, 1.5, "#e9e6df");
sphere(15, 20, 17, 1.6, "#f3f0e9");
// Raised arm and open hand holding the wreath.
line(28, 23, 28, 30, 22, 32, 2, "#e6e2da");
line(30, 22, 32, 32, 20, 37, 1.5, "#f1eee7");
sphere(32, 20, 37, 1.5, "#f7f4ec");
// Friendly, classically curled head.
ellipsoid(23, 22, 35, 3.5, 3, 4, "#e9e6df");
ellipsoid(23, 21, 35, 3, 2.5, 3.5, "#f5f2eb");
for (let x = 20; x <= 26; x += 2) {
sphere(x, 19, 38, 1.2, x % 4 === 0 ? "#ceccc5" : "#dedbd3");
}
for (let x of [19, 27]) {
sphere(x, 22, 37, 1.4, "#d5d2cb");
sphere(x, 21, 34, 1, "#eeeae3");
}
sphere(23, 23, 39, 2.2, "#dedbd3");
set(21, 18, 35, "#777673");
set(25, 18, 35, "#777673");
set(21, 17, 35, "#ffffff");
set(25, 17, 35, "#ffffff");
set(23, 17, 33, "#e6e2da");
line(22, 18, 32, 24, 18, 32, 0, "#c9c5bf");
// A bronze-gold laurel wreath, facing forward so its leaves read clearly.
const cx = 36, cy = 18, cz = 39;
const leafDark = "#977641";
const leafGold = "#c5a363";
const leafLight = "#e3c783";
for (let i = 0; i < 32; i++) {
const a = i * Math.PI * 2 / 32;
const b = (i + 1) * Math.PI * 2 / 32;
line(
cx + 4 * Math.cos(a), cy, cz + 4 * Math.sin(a),
cx + 4 * Math.cos(b), cy, cz + 4 * Math.sin(b),
0, leafDark
);
}
for (let i = 0; i < 16; i++) {
const a = i * Math.PI * 2 / 16;
const x = cx + 4 * Math.cos(a);
const z = cz + 4 * Math.sin(a);
const outward = i % 2 ? 0.7 : -0.7;
line(x, cy - 1, z, x + outward, cy - 1, z + 1.4, 0, leafGold);
ellipsoid(x + outward, cy - 1, z + 1.4, 0.8, 0.5, 0.9,
i % 3 === 0 ? leafLight : leafGold);
}
sphere(33, 19, 36, 1, leafGold);import { draw } from "./assets/voxel";
import { estatuaGriega } from "./assets/estatua-griega";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, estatuaGriega, 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 estatua-griega
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["estatua-griega"] })
# Queda en client/assets/estatua-griega.ts
# https://fogon.page/object/estatua-griega