def __init__(self): super().__init__(width=960, height=640, fovx=80, downSample=1) self.changeTitle("AXI OpenCL 3D Visualizer") self.α = 3.1 self.β = -0.1 self.pos = numpy.array([600.8, 20.4, 600.3]) self.camSpeed = 0.04 self.mouseSensitivity = 20 self.ambLight = 0.08 self.st = 0 self.tt = 200 self.drawAxes = False self.b = None self.chunksize = 50 self.chunkscale = 0.8 self.renderDist = 2 self.rdextra = 0 self.numWorkers = 4 S = self.chunksize L = self.chunkscale self.cchunk = [ int(self.pos[0] / (S * L) + 0.5), int(self.pos[2] / (S * L) + 0.5) ] terr = Terrain.RandTerrain(1) self.rmax = 50000 self.terr = terr self.tp = [mp.Queue(16) for i in range(self.numWorkers)] self.rp = [mp.Queue(16) for i in range(self.numWorkers)] self.workLen = [0 for i in range(self.numWorkers)] self.vischunks = [None for i in range((self.renderDist * 2)**2)] self.reqChunks = [] self.procChunks = [] for u in range(self.cchunk[0] - self.renderDist, self.cchunk[0] + self.renderDist): for v in range(self.cchunk[1] - self.renderDist, self.cchunk[1] + self.renderDist): self.reqChunks.append((u, v)) for i in range(len(self.reqChunks)): a = self.reqChunks[0] del self.reqChunks[0] self.requestChunk(a, i)
def getTerrain(rp, tp): doQuit = False terr = Terrain.RandTerrain(1) while not doQuit: try: a = rp.get(True, 0.2) except: continue if a is None: doQuit = True break else: ga = terr.getArea(*a[3:]) tp.put((*a[:3], ga))