← BásicoObjeto 3Dfogon/guitarra-criolla
Guitarra criolla
Arrastrá para girarlo// «Guitarra criolla» · gpt-6-sol (medium)
// Acoustic guitar («Guitarra criolla»). Be faithful to the reference: keep thin parts thin (1–2 blocks: strings, necks, handles, legs, rods), keep its exact proportions and silhouette, and every visible detail (books on shelves, sound holes, tuning pegs, valves). Don't make it chunkier than the reference.
const wood = ["#c58b49", "#cf9855", "#d8a45f", "#bd7f3e"];
const sideWood = ["#754022", "#824a27", "#90542b"];
const edge = "#e3ba78";
// Rounded lower bout, narrow waist, and smaller upper bout.
const halfWidth = [
7, 11, 13, 14, 15, 16, 16, 16,
15, 15, 14, 13, 12, 11, 10, 10,
11, 12, 13, 12, 11, 9, 7, 4
];
for (let z = 0; z < halfWidth.length; z++) {
const w = halfWidth[z];
for (let x = 24 - w; x <= 24 + w; x++) {
const d = Math.min(x - (24 - w), 24 + w - x);
for (let y = 19; y <= 25; y++) {
const shade = Math.min(2, Math.floor((y - 19) / 3));
set(x, y, z, sideWood[shade]);
}
let color = wood[Math.floor(rand() * wood.length)];
if (z < 4) color = rand() < 0.65 ? "#c28b4a" : color;
set(x, 18, z, color);
// Inlaid pale binding and darker inner purfling follow the outline.
if (d === 0) set(x, 17, z, edge);
else if (d === 1) set(x, 17, z, "#ad6a32");
else if (d === 2 && z > 2) set(x, 17, z, "#e9bb74");
else if (d === 3 && z > 4 && z < 23) set(x, 17, z, "#9e612f");
}
// Pale binding visible along the back edge.
set(24 - w, 25, z, "#b77d41");
set(24 + w, 25, z, "#a96b34");
}
// Subtle wood grain on the soundboard.
for (let i = 0; i < 48; i++) {
const z = 2 + Math.floor(rand() * 20);
const x = 24 + Math.floor((rand() - 0.5) * 19);
if (Math.abs(x - 24) < halfWidth[z] - 4 && get(x, 18, z))
set(x, 17, z, rand() < 0.5 ? "#dca866" : "#bc8040");
}
// Round sound hole with a fine, contrasting rosette.
for (let z = 11; z <= 19; z++) {
for (let x = 19; x <= 29; x++) {
const r = Math.hypot(x - 24, z - 15);
if (r <= 2.65) set(x, 16, z, "#301b15");
else if (r <= 3.35) set(x, 16, z, "#694024");
else if (r <= 4.05) set(x, 16, z, "#e4bb78");
else if (r <= 4.45) set(x, 16, z, "#704423");
}
}
// Slender neck: dark wooden back and a narrower gray-brown fingerboard.
box(21, 19, 20, 27, 22, 38, "#693c26");
box(21, 18, 21, 27, 18, 37, "#9a886c");
box(21, 17, 21, 27, 17, 37, "#807866");
for (let z = 22; z <= 36; z++) {
set(21, 17, z, "#685a49");
set(27, 17, z, "#675948");
}
// Frets, closer together toward the body.
for (const z of [22, 24, 26, 29, 32, 35, 37]) {
box(21, 16, z, 27, 16, z, "#c1b7a0");
set(21, 16, z, "#e0d1ac");
}
box(21, 16, 38, 27, 16, 38, "#eee0bf"); // nut
// Open-slotted classical-guitar headstock.
box(20, 19, 39, 28, 21, 44, "#784026");
box(20, 18, 39, 21, 18, 44, "#a45d30");
box(27, 18, 39, 28, 18, 44, "#94502a");
box(22, 18, 44, 26, 20, 45, "#a96637");
box(22, 17, 45, 26, 17, 45, "#d59a58");
box(23, 17, 40, 25, 17, 43, "#38251c");
box(23, 18, 41, 25, 18, 43, "#38251c");
set(24, 17, 44, "#b97641");
// Three ivory tuning keys on either side, with little metal posts.
for (const z of [39, 42, 44]) {
box(18, 18, z, 20, 18, z, "#c9c5aa");
box(28, 18, z, 30, 18, z, "#c9c5aa");
box(17, 17, z, 18, 18, z, "#e1ddc2");
box(30, 17, z, 31, 18, z, "#e1ddc2");
set(20, 16, z, "#a9a18a");
set(28, 16, z, "#a9a18a");
}
// Dark tie bridge and its light saddle.
box(19, 16, 6, 29, 17, 8, "#61391f");
box(20, 15, 7, 28, 15, 8, "#754222");
box(20, 14, 9, 28, 14, 9, "#e9d8aa");
for (const x of [20, 22, 23, 25, 26, 28])
set(x, 14, 7, "#dbc793");
// Six thin strings, spaced wider over the soundboard.
const bodyStrings = [20, 22, 23, 25, 26, 28];
const neckStrings = [21, 22, 23, 25, 26, 27];
for (let i = 0; i < 6; i++) {
const c = i < 3 ? "#c6b99b" : "#e5d6ae";
line(bodyStrings[i], 14, 9, bodyStrings[i], 14, 20, 0, c);
line(bodyStrings[i], 14, 20, neckStrings[i], 15, 38, 0, c);
line(neckStrings[i], 15, 39, i < 3 ? 20 : 28, 16, [39, 42, 44][i % 3], 0, c);
}import { draw } from "./assets/voxel";
import { guitarraCriolla } from "./assets/guitarra-criolla";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, guitarraCriolla, 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 guitarra-criolla
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["guitarra-criolla"] })
# Queda en client/assets/guitarra-criolla.ts
# https://fogon.page/object/guitarra-criolla