Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import {
- Mesh,
- MeshPhongMaterial,
- FaceColors
- } from "../../node_modules/three/build/three.module.js";
- import { WOOD } from "../colors.mjs";
- import Builder from "./Builder2.mjs";
- import Randomizer from "./Randomizer.mjs";
- export default class Barn extends Mesh {
- constructor() {
- const material = new MeshPhongMaterial( {
- vertexColors: FaceColors,
- flatShading: true
- } );
- const color = Randomizer.colorSpread( WOOD );
- const geometry = new Builder()
- .repeat( 2, ( b, y ) => b.repeat( 11, ( b, x, height, mid ) => {
- const angle = Math.PI / 2 + Math.PI / 2 / ( mid + 1 ) * x;
- height = 1 + Math.sin( angle ) / 2;
- return b.box( 1 / 8, 1 / 32, height ).randomize( 1 / 2 ).translate( x / 8, y * 11 / 8, height / 2 );
- } ) )
- .repeat( 2, ( b, x ) => b.repeat( 11, ( b, y ) =>
- b.box( 1 / 32, 1 / 8, 1 ).randomize().translate( x * 11 / 8, y / 8, 1 / 2 ) ) )
- .repeat( 5, ( b, x, height, mid, _1, count ) => {
- const angle = Math.PI / 2 + Math.PI / 2 / ( mid + 1 ) * ( x * 8 / 11 );
- return b.repeat( 14, ( b, y ) =>
- b.box( 1 / 32, 1 / 8, 2 / count )
- .translate( Math.cos( angle ), y / 8, 2 / 4 + Math.sin( angle ) )
- .rotateY( - angle )
- .randomize( 1 / 2 ) );
- } )
- .color( color )
- .rotateZ( Math.PI / 4 )
- .geometry();
- super( geometry, material );
- this.castShadow = true;
- this.receiveShadow = true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement