add renderer z offset
This commit is contained in:
parent
46256e63df
commit
3992ccd552
4 changed files with 10 additions and 6 deletions
|
@ -29,11 +29,13 @@ class RenderEngine(ABC):
|
||||||
filetype = 'dat'
|
filetype = 'dat'
|
||||||
|
|
||||||
# draw an svg image. supports pseudo-3D shadow-rendering
|
# draw an svg image. supports pseudo-3D shadow-rendering
|
||||||
def __init__(self, width: int, height: int, xoff=0, yoff=0, scale=1, buffer=0, background='#FFFFFF', center=True):
|
def __init__(self, width: int, height: int, xoff=0, yoff=0, zoff=0,
|
||||||
|
scale=1, buffer=0, background='#FFFFFF', center=True):
|
||||||
self.width = width
|
self.width = width
|
||||||
self.height = height
|
self.height = height
|
||||||
self.minx = xoff
|
self.minx = xoff
|
||||||
self.miny = yoff
|
self.miny = yoff
|
||||||
|
self.base_z = zoff
|
||||||
self.scale = scale
|
self.scale = scale
|
||||||
self.orig_buffer = buffer
|
self.orig_buffer = buffer
|
||||||
self.buffer = int(math.ceil(buffer*self.scale))
|
self.buffer = int(math.ceil(buffer*self.scale))
|
||||||
|
|
|
@ -153,10 +153,10 @@ class OpenGLEngine(Base3DEngine):
|
||||||
|
|
||||||
scale_x = self.scale / self.width * 2
|
scale_x = self.scale / self.width * 2
|
||||||
scale_y = self.scale / self.height * 2
|
scale_y = self.scale / self.height * 2
|
||||||
scale_z = (scale_x+scale_y) / 2
|
scale_z = 0.05
|
||||||
|
|
||||||
self.gl_scale = (scale_x, -scale_y, scale_z)
|
self.gl_scale = (scale_x, -scale_y, scale_z)
|
||||||
self.gl_offset = (-self.minx * scale_x - 1, self.maxy * scale_y - 1, 0)
|
self.gl_offset = (-self.minx * scale_x - 1, self.maxy * scale_y - 1, -self.base_z * scale_z)
|
||||||
|
|
||||||
self.vertices = []
|
self.vertices = []
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ class Cropper:
|
||||||
class LevelRenderData:
|
class LevelRenderData:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.levels = []
|
self.levels = []
|
||||||
|
self.base_altitude = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def rebuild():
|
def rebuild():
|
||||||
|
@ -106,6 +107,7 @@ class LevelRenderData:
|
||||||
break
|
break
|
||||||
|
|
||||||
render_data = LevelRenderData()
|
render_data = LevelRenderData()
|
||||||
|
render_data.base_altitude = level.base_altitude
|
||||||
access_restriction_affected = {}
|
access_restriction_affected = {}
|
||||||
|
|
||||||
for sublevel in sublevels:
|
for sublevel in sublevels:
|
||||||
|
|
|
@ -29,9 +29,6 @@ class MapRenderer:
|
||||||
return box(self.minx-1, self.miny-1, self.maxx+1, self.maxy+1)
|
return box(self.minx-1, self.miny-1, self.maxx+1, self.maxy+1)
|
||||||
|
|
||||||
def render(self, engine_cls, center=True):
|
def render(self, engine_cls, center=True):
|
||||||
engine = engine_cls(self.width, self.height, self.minx, self.miny,
|
|
||||||
scale=self.scale, buffer=1, background='#DCDCDC', center=center)
|
|
||||||
|
|
||||||
# add no access restriction to “unlocked“ access restrictions so lookup gets easier
|
# add no access restriction to “unlocked“ access restrictions so lookup gets easier
|
||||||
access_permissions = self.access_permissions | set([None])
|
access_permissions = self.access_permissions | set([None])
|
||||||
|
|
||||||
|
@ -39,6 +36,9 @@ class MapRenderer:
|
||||||
|
|
||||||
level_render_data = LevelRenderData.get(self.level)
|
level_render_data = LevelRenderData.get(self.level)
|
||||||
|
|
||||||
|
engine = engine_cls(self.width, self.height, self.minx, self.miny, float(level_render_data.base_altitude),
|
||||||
|
scale=self.scale, buffer=1, background='#DCDCDC', center=center)
|
||||||
|
|
||||||
if self.full_levels:
|
if self.full_levels:
|
||||||
levels = tuple(chain(*(
|
levels = tuple(chain(*(
|
||||||
tuple(sublevel for sublevel in LevelRenderData.get(level.pk).levels
|
tuple(sublevel for sublevel in LevelRenderData.get(level.pk).levels
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue