Add layer for rendering stored HeightMaps
This commit is contained in:
parent
4c8b548e74
commit
9ab9d12086
67
src/mcedit2/rendering/chunkmeshes/heightlevel.py
Normal file
67
src/mcedit2/rendering/chunkmeshes/heightlevel.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
"""
|
||||||
|
${NAME}
|
||||||
|
"""
|
||||||
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import numpy
|
||||||
|
|
||||||
|
from mcedit2.rendering import renderstates
|
||||||
|
from mcedit2.rendering.blockmeshes import standardCubeTemplates
|
||||||
|
from mcedit2.rendering.blockmeshes import ChunkMeshBase
|
||||||
|
from mcedit2.rendering.layers import Layer
|
||||||
|
from mcedit2.rendering.scenegraph.vertex_array import VertexNode
|
||||||
|
from mcedit2.rendering.vertexarraybuffer import QuadVertexArrayBuffer
|
||||||
|
from mceditlib import faces
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class HeightLevelBlockMesh(ChunkMeshBase):
|
||||||
|
renderstate = renderstates.RenderstateHeightLevelNode
|
||||||
|
layer = Layer.HeightMap
|
||||||
|
def makeChunkVertices(self, chunk, limitBox):
|
||||||
|
"""
|
||||||
|
|
||||||
|
:param chunk:
|
||||||
|
:type chunk: WorldEditorChunk
|
||||||
|
:param limitBox:
|
||||||
|
:return: :raise:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not hasattr(chunk, 'HeightMap') or chunk.HeightMap is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
heightMap = chunk.HeightMap
|
||||||
|
chunkWidth = chunkLength = 16
|
||||||
|
chunkHeight = chunk.dimension.bounds.height
|
||||||
|
|
||||||
|
z, x = list(numpy.indices((chunkLength, chunkWidth)))
|
||||||
|
y = (heightMap - 1)[:chunkLength, :chunkWidth]
|
||||||
|
numpy.clip(y, 0, chunkHeight - 1, y)
|
||||||
|
|
||||||
|
nonZeroHeights = y > 0
|
||||||
|
|
||||||
|
x = x[nonZeroHeights]
|
||||||
|
if not len(x):
|
||||||
|
return
|
||||||
|
|
||||||
|
z = z[nonZeroHeights]
|
||||||
|
y = y[nonZeroHeights]
|
||||||
|
|
||||||
|
yield
|
||||||
|
vertexBuffer = QuadVertexArrayBuffer(len(x), textures=False, lights=False)
|
||||||
|
|
||||||
|
vertexBuffer.vertex[..., 0] = x[:, numpy.newaxis]
|
||||||
|
vertexBuffer.vertex[..., 1] = y[:, numpy.newaxis]
|
||||||
|
vertexBuffer.vertex[..., 2] = z[:, numpy.newaxis]
|
||||||
|
|
||||||
|
|
||||||
|
vertexBuffer.vertex[:] += standardCubeTemplates[faces.FaceYIncreasing, ..., :3]
|
||||||
|
|
||||||
|
vertexBuffer.rgba[:] = (0xff, 0x00, 0xff, 0x9f)
|
||||||
|
self.sceneNode = VertexNode(vertexBuffer)
|
||||||
|
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
@ -12,6 +12,7 @@ from mcedit2.rendering.chunkmeshes.chunksections import ChunkSectionsRenderer
|
|||||||
from mcedit2.rendering.chunkmeshes.entitymesh import TileEntityLocationMesh, MonsterLocationRenderer, ItemRenderer, \
|
from mcedit2.rendering.chunkmeshes.entitymesh import TileEntityLocationMesh, MonsterLocationRenderer, ItemRenderer, \
|
||||||
ItemFrameMesh, MonsterModelRenderer, CommandBlockColorsMesh, CommandBlockLocationMesh, \
|
ItemFrameMesh, MonsterModelRenderer, CommandBlockColorsMesh, CommandBlockLocationMesh, \
|
||||||
TileEntityModelRenderer
|
TileEntityModelRenderer
|
||||||
|
from mcedit2.rendering.chunkmeshes.heightlevel import HeightLevelBlockMesh
|
||||||
from mcedit2.rendering.chunkmeshes.lowdetail import LowDetailBlockMesh, OverheadBlockMesh
|
from mcedit2.rendering.chunkmeshes.lowdetail import LowDetailBlockMesh, OverheadBlockMesh
|
||||||
from mcedit2.rendering.chunkmeshes.terrainpop import TerrainPopulatedRenderer
|
from mcedit2.rendering.chunkmeshes.terrainpop import TerrainPopulatedRenderer
|
||||||
from mcedit2.rendering.chunkmeshes.tileticks import TileTicksRenderer
|
from mcedit2.rendering.chunkmeshes.tileticks import TileTicksRenderer
|
||||||
@ -136,6 +137,7 @@ class ChunkUpdate(object):
|
|||||||
ChunkSectionsRenderer,
|
ChunkSectionsRenderer,
|
||||||
LowDetailBlockMesh,
|
LowDetailBlockMesh,
|
||||||
OverheadBlockMesh,
|
OverheadBlockMesh,
|
||||||
|
HeightLevelBlockMesh,
|
||||||
]
|
]
|
||||||
|
|
||||||
@profiler.iterator("ChunkUpdate")
|
@profiler.iterator("ChunkUpdate")
|
||||||
|
@ -18,9 +18,10 @@ class Layer:
|
|||||||
ItemFrames = "ItemFrames"
|
ItemFrames = "ItemFrames"
|
||||||
TileTicks = "TileTicks"
|
TileTicks = "TileTicks"
|
||||||
TerrainPopulated = "TerrainPopulated"
|
TerrainPopulated = "TerrainPopulated"
|
||||||
|
HeightMap = "HeightMap"
|
||||||
ChunkSections = "ChunkSections"
|
ChunkSections = "ChunkSections"
|
||||||
AllLayers = (Blocks, MonsterLocations, Items,
|
AllLayers = (Blocks, MonsterLocations, Items,
|
||||||
TileEntities, TileEntityLocations,
|
TileEntities, TileEntityLocations,
|
||||||
CommandBlockColors, CommandBlockLocations,
|
CommandBlockColors, CommandBlockLocations,
|
||||||
ItemFrames, TileTicks, ChunkSections)
|
ItemFrames, TileTicks, ChunkSections, HeightMap)
|
||||||
DefaultVisibleLayers = (Blocks, Items, TileEntities, CommandBlockColors, ItemFrames)
|
DefaultVisibleLayers = (Blocks, Items, TileEntities, CommandBlockColors, ItemFrames)
|
||||||
|
@ -38,6 +38,18 @@ class RenderstateLowDetailNode(rendernode.RenderstateRenderNode):
|
|||||||
def exit(self):
|
def exit(self):
|
||||||
GL.glPopAttrib()
|
GL.glPopAttrib()
|
||||||
|
|
||||||
|
class RenderstateHeightLevelNode(rendernode.RenderstateRenderNode):
|
||||||
|
def enter(self):
|
||||||
|
GL.glPushAttrib(GL.GL_ENABLE_BIT | GL.GL_POLYGON_BIT)
|
||||||
|
GL.glDisable(GL.GL_CULL_FACE)
|
||||||
|
GL.glDisable(GL.GL_TEXTURE_2D)
|
||||||
|
GL.glEnable(GL.GL_BLEND)
|
||||||
|
GL.glPolygonOffset(-1, -1)
|
||||||
|
GL.glEnable(GL.GL_POLYGON_OFFSET_FILL)
|
||||||
|
|
||||||
|
def exit(self):
|
||||||
|
GL.glPopAttrib()
|
||||||
|
|
||||||
class RenderstateAlphaTestNode(rendernode.RenderstateRenderNode):
|
class RenderstateAlphaTestNode(rendernode.RenderstateRenderNode):
|
||||||
def enter(self):
|
def enter(self):
|
||||||
GL.glPushAttrib(GL.GL_ENABLE_BIT)
|
GL.glPushAttrib(GL.GL_ENABLE_BIT)
|
||||||
@ -81,4 +93,5 @@ allRenderstates = (
|
|||||||
RenderstateWaterNode,
|
RenderstateWaterNode,
|
||||||
RenderstateIceNode,
|
RenderstateIceNode,
|
||||||
RenderstateEntityNode,
|
RenderstateEntityNode,
|
||||||
|
RenderstateHeightLevelNode,
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user