◆ Portail Antalaha

Annuaire › Code ouvert

Maison 3D pour une agence immobilière

tutorial · Voir le site ↗
Connectez-vous pour copier ce site

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;
})();