keep triangles together in base 3d engine

This commit is contained in:
Laura Klünder 2017-11-09 20:04:25 +01:00
parent 37e9dcc1f6
commit b2da4df1c4
2 changed files with 8 additions and 7 deletions

View file

@ -1,9 +1,10 @@
from itertools import chain
from typing import Optional
import numpy as np
from c3nav.mapdata.render.data import HybridGeometry
from c3nav.mapdata.render.engines.base import RenderEngine
from c3nav.mapdata.render.engines.base import FillAttribs, RenderEngine, StrokeAttribs
class Base3DEngine(RenderEngine):
@ -22,13 +23,13 @@ class Base3DEngine(RenderEngine):
def _append_to_vertices(self, vertices, append=None):
if append is not None:
append = np.array(append, dtype=np.float32).flatten()
vertices = np.hstack((
vertices = np.dstack((
vertices,
append.reshape(1, append.size).repeat(vertices.shape[0], 0)
append.reshape(1, append.size).repeat(vertices.shape[0]*3, 0).reshape((-1, 3, append.size))
))
return vertices
def _place_geometry(self, geometry: HybridGeometry, append=None):
faces = np.vstack(tuple(chain(geometry.faces, *geometry.add_faces.values())))
vertices = faces.reshape(-1, 3) * self.np_scale + self.np_offset
vertices = faces * self.np_scale + self.np_offset
return self._append_to_vertices(vertices, append).flatten()

View file

@ -166,10 +166,10 @@ class OpenGLEngine(Base3DEngine):
lines = unary_union(lines).buffer(width, cap_style=CAP_STYLE.flat, join_style=JOIN_STYLE.mitre)
vertices, faces = triangulate_polygon(lines)
triangles = np.hstack((vertices[faces.flatten()], np.full((faces.size, 1), fill_value=altitude)))
vertices = np.vstack(triangles).astype(np.float32) * self.np_scale + self.np_offset
triangles = np.dstack((vertices[faces], np.full((faces.size, 1), fill_value=altitude).reshape((-1, 3, 1))))
triangles = triangles.astype(np.float32) * self.np_scale + self.np_offset
return self._append_to_vertices(vertices, append).flatten()
return self._append_to_vertices(triangles, append).flatten()
worker = OpenGLWorker()