1 /** 2 Copyright: Copyright (c) 2017 Andrey Penechko. 3 License: $(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0). 4 Authors: Andrey Penechko. 5 */ 6 module voxelman.world.mesh.sidemeshers.slope; 7 8 import voxelman.log; 9 import voxelman.container.buffer; 10 import voxelman.math; 11 import voxelman.geometry.cube; 12 13 import voxelman.world.block; 14 import voxelman.world.mesh.chunkmesh; 15 16 import voxelman.world.mesh.config; 17 import voxelman.world.mesh.sidemeshers.utils; 18 import voxelman.world.mesh.tables.slope; 19 20 void meshSlopeSideOccluded(CubeSide side, ubyte[4] cornerOcclusion, SideParams d) 21 { 22 immutable float mult = shadowMultipliers[side]; 23 24 // apply fake lighting 25 float r = mult * d.color.r; 26 float g = mult * d.color.g; 27 float b = mult * d.color.b; 28 29 // Ambient occlusion multipliers 30 float vert0AoMult = occlusionTable[cornerOcclusion[0]]; 31 float vert1AoMult = occlusionTable[cornerOcclusion[1]]; 32 float vert2AoMult = occlusionTable[cornerOcclusion[2]]; 33 float vert3AoMult = occlusionTable[cornerOcclusion[3]]; 34 35 static if (AO_DEBUG_ENABLED) 36 immutable ubyte[3][4] finalColors = getDebugAOColors(cornerOcclusion); 37 else 38 immutable ubyte[3][4] finalColors = [ 39 [cast(ubyte)(vert0AoMult * r), cast(ubyte)(vert0AoMult * g), cast(ubyte)(vert0AoMult * b)], 40 [cast(ubyte)(vert1AoMult * r), cast(ubyte)(vert1AoMult * g), cast(ubyte)(vert1AoMult * b)], 41 [cast(ubyte)(vert2AoMult * r), cast(ubyte)(vert2AoMult * g), cast(ubyte)(vert2AoMult * b)], 42 [cast(ubyte)(vert3AoMult * r), cast(ubyte)(vert3AoMult * g), cast(ubyte)(vert3AoMult * b)]]; 43 44 ubyte[3] indicies = slopeFaceIndicies[d.rotation][side]; 45 ubyte[3] colorIndicies = slopeColorIndicies[d.rotation]; 46 d.buffer.put( 47 cast(MeshVertex)MeshVertex2( 48 cubeVerticies[indicies[0]][0] + d.blockPos.x, 49 cubeVerticies[indicies[0]][1] + d.blockPos.y, 50 cubeVerticies[indicies[0]][2] + d.blockPos.z, 51 finalColors[colorIndicies[0]]), 52 cast(MeshVertex)MeshVertex2( 53 cubeVerticies[indicies[1]][0] + d.blockPos.x, 54 cubeVerticies[indicies[1]][1] + d.blockPos.y, 55 cubeVerticies[indicies[1]][2] + d.blockPos.z, 56 finalColors[colorIndicies[1]]), 57 cast(MeshVertex)MeshVertex2( 58 cubeVerticies[indicies[2]][0] + d.blockPos.x, 59 cubeVerticies[indicies[2]][1] + d.blockPos.y, 60 cubeVerticies[indicies[2]][2] + d.blockPos.z, 61 finalColors[colorIndicies[2]]) 62 ); 63 }