← Antiguo y prehistoriaObjeto 3Dfogon/templo-griego
Templo griego
Arrastrá para girarlo// «Templo griego» · gpt-6-sol (medium)
// A Greek temple like a small Parthenon: a stepped white marble platform, a row of fluted columns all around, a triangular pediment roof on the front (-y) with a simple relief, and a terracotta tiled roof. Clean white and light grey with warm shading.
const marble = "#eeeae0";
const light = "#faf7ee";
const warm = "#ded8ca";
const shadow = "#c8c5be";
const groove = "#bbb9b4";
const red = "#a94f39";
const tile = "#bd6849";
const tileLight = "#d17a54";
const tileDark = "#9f4b38";
const bronze = "#9c7650";
// Three broad marble steps.
box(4, 4, 0, 43, 43, 0, shadow);
box(5, 5, 1, 42, 42, 1, warm);
box(7, 7, 2, 40, 40, 2, light);
box(8, 8, 3, 39, 39, 3, marble);
// A short central staircase projects toward the viewer.
box(18, 2, 0, 29, 7, 0, light);
box(18, 4, 1, 29, 8, 1, warm);
box(18, 6, 2, 29, 9, 2, light);
// The enclosed inner chamber leaves a walkway behind the columns.
box(15, 17, 4, 32, 32, 19, warm);
box(15, 17, 18, 32, 32, 20, light);
box(16, 16, 4, 31, 16, 18, marble);
box(20, 15, 5, 27, 15, 17, bronze);
box(21, 14, 5, 26, 15, 16, "#723d35");
box(23, 13, 6, 23, 14, 15, tileDark);
box(26, 13, 10, 26, 13, 11, "#dfb977");
// Columns around all four sides.
function column(cx, cy) {
cylinder(cx, cy, 4, 2, 2, warm);
cylinder(cx, cy, 6, 1.8, 14, marble);
for (let z = 6; z <= 19; z++) {
set(cx, cy - 2, z, z % 5 === 0 ? light : warm);
set(cx, cy + 2, z, groove);
set(cx - 2, cy, z, warm);
set(cx + 2, cy, z, groove);
set(cx - 1, cy - 1, z, light);
}
box(cx - 2, cy - 2, 20, cx + 2, cy + 2, 20, light);
box(cx - 2, cy - 2, 21, cx + 2, cy + 2, 21, warm);
}
for (const x of [11, 16, 21, 26, 31, 36]) {
column(x, 11);
column(x, 36);
}
for (const y of [16, 21, 26, 31]) {
column(11, y);
column(36, y);
}
// Heavy, layered entablature and a readable front frieze.
box(9, 9, 22, 38, 38, 22, light);
box(9, 9, 23, 38, 38, 23, warm);
box(9, 9, 24, 38, 38, 24, light);
for (let x = 11; x <= 36; x += 5) {
box(x, 8, 23, x + 1, 8, 24, shadow);
set(x, 8, 22, bronze);
}
// A triangular marble pediment faces the viewer; tiled slopes run behind it.
function roofHeight(x) {
return 25 + Math.max(0, Math.round((15.5 - Math.abs(x - 23.5)) * 0.48));
}
for (let x = 8; x <= 39; x++) {
const top = roofHeight(x);
if (x >= 9 && x <= 38) {
box(x, 7, 25, x, 9, top - 1, x % 6 === 0 ? warm : marble);
}
// Pale projecting outline on the front gable.
set(x, 6, top - 1, shadow);
set(x, 7, top, light);
for (let y = 9; y <= 39; y++) {
const color = (y + Math.floor(x / 2)) % 5 === 0
? tileLight
: (y % 5 === 0 ? tileDark : tile);
set(x, y, top - 1, tileDark);
set(x, y, top, color);
}
}
// Ridge caps and pronounced lower eaves.
for (let y = 9; y <= 40; y++) {
set(23, y, 33, tileLight);
set(24, y, 33, tileLight);
set(8, y, 25, tileDark);
set(39, y, 25, tileDark);
}
// Simple raised relief: a central standing figure and two wreath-like forms.
box(23, 6, 26, 24, 6, 29, warm);
box(22, 6, 28, 25, 6, 28, light);
box(23, 6, 30, 24, 6, 30, light);
set(23, 6, 31, bronze);
for (const x of [17, 30]) {
set(x, 6, 26, bronze);
set(x - 1, 6, 27, warm);
set(x, 6, 28, light);
set(x + 1, 6, 27, warm);
}
// Sparse warm variation makes the large stone surfaces less flat.
forEach((x, y, z, color) => {
if (color === marble && rand() < 0.035) set(x, y, z, light);
else if (color === warm && rand() < 0.025) set(x, y, z, marble);
});import { draw } from "./assets/voxel";
import { temploGriego } from "./assets/templo-griego";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, temploGriego, 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 templo-griego
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["templo-griego"] })
# Queda en client/assets/templo-griego.ts
# https://fogon.page/object/templo-griego