keep triangles together in base 3d engine
This commit is contained in:
parent
37e9dcc1f6
commit
b2da4df1c4
2 changed files with 8 additions and 7 deletions
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue