Annuaire › Code ouvert
Code publié par son auteur, en lecture seule. « Copier dans mon espace » crée un nouveau site à vous (non publié) que vous pouvez modifier librement.
js/sol.js · 2.9 Ko
/* ==========================================================================
* js/sol.js — LE SOL : pelouse, bordure de terre, ombre et chemin
* --------------------------------------------------------------------------
* Tout est « posé à plat » : on couche des formes (qui regardent vers z par
* défaut) en les tournant de TAU/4 autour de l'axe x. Après cette rotation,
* la face de la forme regarde vers le haut (y négatif).
*
* Ces formes sont énormes par rapport aux autres : on utilise donc
* Maison.fixerOrdreSol() pour qu'elles soient toujours dessinées en premier
* (voir js/outils.js pour l'explication).
*
* Dépend de : Zdog, Maison.COULEURS, Maison.DIM, Maison.fixerOrdreSol.
* ========================================================================== */
(function () {
'use strict';
var TAU = Zdog.TAU;
/**
* Construit le sol de la scène.
* @param {Zdog.Anchor} parent Où l'accrocher (le « monde »).
*/
function creerSol(parent) {
var C = Maison.COULEURS;
var D = Maison.DIM;
// 1) La bordure de terre : un grand disque brun, légèrement plus bas.
// Une Ellipse avec seulement `diameter` est un cercle parfait.
// fill: true -> rempli ; stroke: false -> pas de contour.
var terre = new Zdog.Ellipse({
addTo: parent,
diameter: 280,
rotate: { x: TAU / 4 }, // on couche le disque à l'horizontale
translate: { y: 2 }, // 2 unités sous la pelouse
fill: true,
stroke: false,
color: C.terre,
});
Maison.fixerOrdreSol(terre, 0); // tout au fond
// 2) La pelouse : un disque vert un peu plus petit, posé sur la terre.
var herbe = new Zdog.Ellipse({
addTo: parent,
diameter: 266,
rotate: { x: TAU / 4 },
fill: true,
stroke: false,
color: C.herbe,
});
Maison.fixerOrdreSol(herbe, 1);
// 3) L'ombre de la maison : une ellipse noire TRANSPARENTE (rgba, 4e valeur
// = opacité de 0 à 1) pour donner de l'ancrage au bâtiment.
var ombre = new Zdog.Ellipse({
addTo: parent,
width: D.largeur + 40,
height: D.profondeur + 30,
rotate: { x: TAU / 4 },
translate: { y: -0.3, x: 8, z: -4 },
fill: true,
stroke: false,
color: 'rgba(20, 40, 20, 0.22)',
});
Maison.fixerOrdreSol(ombre, 2);
// 4) Le chemin de sable : un rectangle couché qui part du bas de l'escalier
// vers le spectateur. On le déplace sur z pour qu'il commence à la
// dernière marche (z ≈ 82) et mesure 70 de long : son centre est à 82 + 35.
var chemin = new Zdog.Rect({
addTo: parent,
width: 22,
height: 70,
rotate: { x: TAU / 4 },
translate: { x: D.escalierX, y: -0.5, z: 82 + 35 },
fill: true,
stroke: 2,
color: C.sable,
});
Maison.fixerOrdreSol(chemin, 3);
}
Maison.creerSol = creerSol;
})();