private static void BuildFaceLight(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.Map.OCMap map, Vector3i pos, OpenCog.Builder.OCMeshBuilder mesh) { Vector3i dir = OpenCog.Builder.OCCubeBuilder.directions[(int)face]; UnityEngine.Color color = OpenCog.Builder.OCBuildUtils.GetBlockLight(map, pos + dir); mesh.AddFaceColor(color); }
private static void BuildFaceLight(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.Map.OCMap map, Vector3i pos, OpenCog.Builder.OCMeshBuilder mesh) { foreach (Vector3 ver in vertices[(int)face]) { Color color = OpenCog.Builder.OCBuildUtils.GetSmoothVertexLight(map, pos, ver, face); mesh.AddColor(color); } }
private static void BuildFace(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock cube, OpenCog.Map.OCBlockDirection direction, Vector3 localPos, OpenCog.Builder.OCMeshBuilder mesh) { int iFace = (int)face; mesh.AddFaceIndices(cube.AtlasID); mesh.AddVertices(vertices[iFace], localPos); mesh.AddNormals(normals[iFace]); mesh.AddTexCoords(cube.GetFaceUV(face, direction)); }
private static void BuildFace(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.BlockSet.BaseBlockSet.OCFluidBlock fluid, UnityEngine.Vector3 localPos, OpenCog.Builder.OCMeshBuilder mesh) { int iFace = (int)face; mesh.AddFaceIndices(fluid.AtlasID); mesh.AddVertices(OpenCog.Builder.OCCubeBuilder.vertices[iFace], localPos); mesh.AddNormals(OpenCog.Builder.OCCubeBuilder.normals[iFace]); mesh.AddTexCoords(fluid.GetFaceUV()); }
//--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Private Member Functions //--------------------------------------------------------------------------- private static bool IsFaceVisible(OpenCog.Map.OCMap map, Vector3i nearPos, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face) { if (face == OCCubeBlock.CubeFace.Top) { OpenCog.Map.OCBlockData block = map.GetBlock(nearPos); return(block.IsEmpty() || !block.IsFluid()); } else { return(map.GetBlock(nearPos).IsEmpty()); } }
private static bool IsFaceVisible(OpenCog.Map.OCMap map, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, Vector3i nearPos) { if (face == OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Bottom || face == OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Top) { OCBlock block = map.GetBlock(nearPos).block; if (block is OCCubeBlock && !block.IsAlpha()) { return(false); } if (block is OCCactusBlock) { return(false); } } return(true); }
public Vector2[] GetFaceUV(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face) { switch (face) { case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Front: return(_sideVectors); case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Back: return(_sideVectors); case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Right: return(_sideVectors); case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Left: return(_sideVectors); case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Top: return(_topVectors); case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Bottom: return(_bottomVectors); } return(null); }
public static UnityEngine.Color GetSmoothVertexLight(OpenCog.Map.OCMap map, Vector3i pos, UnityEngine.Vector3 vertex, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face) { // pos - позиция блока // vertex позиция вершины относительно блока т.е. от -0.5 до 0.5 int dx = (int)Mathf.Sign(vertex.x); int dy = (int)Mathf.Sign(vertex.y); int dz = (int)Mathf.Sign(vertex.z); Vector3i a, b, c, d; if (face == OCCubeBlock.CubeFace.Left || face == OCCubeBlock.CubeFace.Right) // X { a = pos + new Vector3i(dx, 0, 0); b = pos + new Vector3i(dx, dy, 0); c = pos + new Vector3i(dx, 0, dz); d = pos + new Vector3i(dx, dy, dz); } else if (face == OCCubeBlock.CubeFace.Bottom || face == OCCubeBlock.CubeFace.Top) // Y { a = pos + new Vector3i(0, dy, 0); b = pos + new Vector3i(dx, dy, 0); c = pos + new Vector3i(0, dy, dz); d = pos + new Vector3i(dx, dy, dz); } else // Z { a = pos + new Vector3i(0, 0, dz); b = pos + new Vector3i(dx, 0, dz); c = pos + new Vector3i(0, dy, dz); d = pos + new Vector3i(dx, dy, dz); } if (map.GetBlock(b).IsAlpha() || map.GetBlock(c).IsAlpha()) { Color c1 = GetBlockLight(map, a); Color c2 = GetBlockLight(map, b); Color c3 = GetBlockLight(map, c); Color c4 = GetBlockLight(map, d); return((c1 + c2 + c3 + c4) / 4f); } else { Color c1 = GetBlockLight(map, a); Color c2 = GetBlockLight(map, b); Color c3 = GetBlockLight(map, c); return((c1 + c2 + c3) / 3f); } }