Ejemplo n.º 1
0
def setRoadUniforms():
    Shaders.updateUniversalUniform(
        'roadcontrols',
        np.insert(np.array(allControlPoints[::2]), 1, 0, axis=1)[:800])
    Shaders.updateUniversalUniform('roadcontrolscount',
                                   min(800,
                                       len(allControlPoints) / 2))
Ejemplo n.º 2
0
  def main_display(self, width, height, **kwargs):
    if self.line:
      gl.glPolygonMode(gl.GL_FRONT_AND_BACK,gl.GL_LINE)
#    gl.glEnable(gl.GL_CULL_FACE)
    self.camera.render()
    projection = transforms.perspective( 60.0, width/float(height), 0.3, 1e7 )
    Shaders.updateUniversalUniform('projectionNear', 0.3)
    Shaders.updateUniversalUniform('projectionFar', 1e7)
    Shaders.setUniform('projection', projection)
    Shaders.setUniform('aspectRatio', width/float(height))
    Shaders.setUniform('windowWidth', float(width))

    self.camera.render()
    self.camera.render('user')

    self.Terrain.display(self.camera)
    self.Marker.display()
    self.grass.display(self.camera)
    self.Forest.display(self.camera.position)
    self.Characters.display(self.camera)
    self.Buildings.display(self.camera)

    self.particles.render_all()
    gl.glDisable(gl.GL_CULL_FACE)
    gl.glPolygonMode(gl.GL_FRONT_AND_BACK,gl.GL_FILL);
Ejemplo n.º 3
0
def render(scene):
  global count,sunTheta
  sunTheta = gameTime

  shadowCamera.theta = sunTheta
  shadowCamera.phi = sunPhi

  shadowCamera.update()
  shadowCamera.render()

  sunDirection = -shadowCamera.direction
  Shaders.setUniform('sunDirection',sunDirection)

  for i in range(3):
    if count % 20 ** i != 0:
      continue
    if np.sum(shadowCamera.lockObject.position*shadowCamera.lockObject.position) > 6e4**2 or shadowCamera.lockObject.position[1]>4e3:
      if i<2:
        continue
    renderStages[i].load(shadowSize, shadowSize)
    Shaders.setUniform('projection',projections[i])
    shadowCamera.render('shadow'+str(i+1))

    scene.Terrain.display(shadowCamera.lockObject)
    scene.Characters.display(shadowCamera.lockObject)
    scene.Marker.display()
    scene.Buildings.display(shadowCamera.lockObject)
    scene.grass.display(shadowCamera.lockObject)
    scene.Forest.display(shadowCamera.lockObject.position,i)

  Shaders.setUniform('shadowLevel',-1)

  count+=1
Ejemplo n.º 4
0
import numpy as np
from dent.configuration import config
import logging
import dent.MultiObject as MultiObject
import dent.Shaders as Shaders
import OpenGL.GL as gl

logging.info("Loading trees")

tree = MultiObject.MultiObject('assets/tree5/Conifers tree 1 N1006162.3DS', scale=15)

logging.info("Generating trees")

shaderObj = Shaders.TransformFeedbackShader('testTransform')
shaderObj.addProgram(gl.GL_VERTEX_SHADER, Shaders.ShaderFile('shaders/forestFeedback/vertex.shd', gl.GL_VERTEX_SHADER))
shaderObj.addProgram(gl.GL_GEOMETRY_SHADER, Shaders.ShaderFile('shaders/forestFeedback/geometry.shd',gl.GL_GEOMETRY_SHADER))
shaderObj.addOutput('outValue')
Shaders.setUniversalUniforms(shaderObj)

shaderObj.build()
shaderObj.load()

N = int(config.forest_tree_count ** 0.5)
shaderObj['scan'] = N
shaderObj['range'] = N * 12.
shaderObj['center'] = np.zeros(0, dtype=np.float32)
ips = np.zeros(N*N, dtype=[('id', np.int32, 1)])
ips['id'] = np.arange(N*N)

idd = shaderObj.setData(ips)
# On average one out of four trees is placed.
Ejemplo n.º 5
0
import dent.Shaders as Shaders
import logging
import OpenGL.GL as gl
import numpy as np

transform_shader = Shaders.TransformFeedbackShader('rock_placement_feedback')
transform_shader.addProgram(gl.GL_VERTEX_SHADER, Shaders.ShaderFile('rock_placement', gl.GL_VERTEX_SHADER))
Shaders.shaders['rock_placement_feedback'] = transform_shader
transform_shader.addProgram(gl.GL_GEOMETRY_SHADER, Shaders.ShaderFile('rock_placement',gl.GL_GEOMETRY_SHADER))
transform_shader.addOutput('outValue')

transform_shader.build()
transform_shader.load()

input_sizes = []
render_ids = []
output_buffers = []

def initialise(buffer_sizes):
  for max_N in buffer_sizes:
    ids = np.zeros(max_N, dtype=[('id',np.int32,1)])
    ids['id'] = np.arange(max_N)

    render_id = transform_shader.setData(ids)
    output_buffer = transform_shader.getOutputBufferObject(render_id, max_N*16*4)

    input_sizes.append(max_N)
    render_ids.append(render_id)
    output_buffers.append(output_buffer)

def update(centre):
Ejemplo n.º 6
0
import numpy as np
import heapq
import dent.args as args
import dent.assets as assets
import random
import dent.Shaders as Shaders
import dent.transforms as transforms
import OpenGL.GL as gl
import logging
import Terrain

pagingShader = Shaders.getShader('roadPaging')
data = np.zeros(4, dtype=[("position", np.float32, 3)])
data['position'] = [(-1, -1, 0.999999), (-1, 1, 0.999999), (1, -1, 0.999999),
                    (1, 1, 0.999999)]
I = [0, 1, 2, 1, 2, 3]
indices = np.array(I, dtype=np.int32)
pagingRenderID = pagingShader.setData(data, indices)


def generateControls(start, end):
    """Sigh.  Don't try debug this too hard.  Its an A* counting the gradient as
    a weight."""
    start = np.array(start, dtype=np.float32)
    end = np.array(end, dtype=np.float32)

    logging.info("Generating road from {} to {}".format(start, end))

    curr = start.copy()

    ans = []
Ejemplo n.º 7
0
      nz = x1+np.sin(s*2*np.pi)*dx / (2*np.pi)
      nw = y1+np.sin(t*2*np.pi)*dy / (2*np.pi)

      t = noise.snoise4(nx, ny, nz, nw, octaves=10, persistence=0.5)
      d[i, j] = t
  d -= np.min(d)
  d /= np.max(d)-np.min(d)
  d *= 2
  d -= 1
  for i in tqdm.trange(textWidth, leave=False):
    for j in range(textHeight):
      v1 = np.array([float(i)/textWidth,   d[i, j][3],                float(j)/textWidth])
      v2 = np.array([float(i+1)/textWidth, d[(i+1)%textWidth, j][3],  float(j)/textWidth])
      v3 = np.array([float(i)/textWidth,   d[i, (j+1)%textHeight][3], float(j+1)/textWidth])
      d[i, j][:3] = np.cross(v3-v1, v2-v1)
      d[i, j][:3] /= np.linalg.norm(d[i, j][:3])
      d[i, j][0], d[i, j][2] = d[i, j][2], d[i, j][0]
  return d

d = assets.getAsset('noisedata', generateNoise, (), args.args.remake_noise)

logging.info("Uploading texture to GPU")
noiseTexture.loadData(d, keep_copy=True)
noiseTexture.load()

Shaders.updateUniversalUniform('noise', Texture.NOISE_NUM)
Shaders.updateUniversalUniform('noisemap', Texture.NOISE_NUM)

def get(x, y):
  return d[int(d.shape[0]*x)%d.shape[0]][int(d.shape[1]*y)%d.shape[1]]
Ejemplo n.º 8
0
shadowCamera.update()

sunDirection = shadowCamera.direction

renderStages = [RenderStage(depth_only=True) for _ in xrange(3)]
for i in renderStages:
  i.reshape(shadowSize, shadowSize)
renderStages[0].displayDepthTexture.loadAs(Texture.SHADOWS1)
renderStages[1].displayDepthTexture.loadAs(Texture.SHADOWS2)
renderStages[2].displayDepthTexture.loadAs(Texture.SHADOWS3)

projections = []
for i in range(3):
  width = 20 * 15**i
  projections.append(transforms.ortho(-width,width,-width,width, 40000. - 2*width, 40000. + 2*width))
  Shaders.setUniform('shadowProjection'+str(i+1),projections[i])

count = 0

Shaders.setUniform('shadowTexture1',Texture.SHADOWS1_NUM)
Shaders.setUniform('shadowTexture2',Texture.SHADOWS2_NUM)
Shaders.setUniform('shadowTexture3',Texture.SHADOWS3_NUM)

def render(scene):
  global count,sunTheta
  sunTheta = gameTime

  shadowCamera.theta = sunTheta
  shadowCamera.phi = sunPhi

  shadowCamera.update()
Ejemplo n.º 9
0
import dent.Shaders as Shaders
import numpy as np
import OpenGL.GL as gl
import dent.Texture as Texture
import lighting

shader = Shaders.getShader('general', instance=True)
shader['colormap'] = Texture.COLORMAP_NUM

data = np.zeros(24,
                dtype=[("position", np.float32, 3), ("normal", np.float32, 3),
                       ("uv", np.float32, 2)])
I = []
for i in range(8):
    I += [i * 3, i * 3 + 1, i * 3 + 2]
h = 2**0.5
data['position'] = [(-1, 0, -1), (0, h, 0), (-1, 0, 1), (-1, 0, 1), (0, h, 0),
                    (1, 0, 1), (1, 0, 1), (0, h, 0), (1, 0, -1), (1, 0, -1),
                    (0, h, 0), (-1, 0, -1), (-1, 0, -1),
                    (0, -h, 0), (-1, 0, 1), (-1, 0, 1), (0, -h, 0), (1, 0, 1),
                    (1, 0, 1), (0, -h, 0), (1, 0, -1), (1, 0, -1), (0, -h, 0),
                    (-1, 0, -1)]
data['normal']   = [(-1, 1, 0)] * 3 +\
                   [(0, 1, 1)] * 3 + \
                   [(1, 1, 0)] * 3 + \
                   [(0, 1, -1)] * 3 + \
                   [(-1, -1, 0)] * 3 + \
                   [(0, -1, 1)] * 3 + \
                   [(1, -1, 0)] * 3 + \
                   [(0, -1, -1)] * 3
data['uv'] = [0, 0]
Ejemplo n.º 10
0
import numpy as np
import dent.assets
import procgen.Rock
import dent.Shaders as Shaders
import dent.transforms
import OpenGL.GL as gl

shader = Shaders.getShader('rock', instance=True)

class Rock(object):
  def __init__(self, instance_buffer, instance_count, detail):
    self.position = np.array([0,0.5,0],dtype=float)

    self.shader = shader

    self.meshdata, self.meshindices = dent.assets.getAsset('rock'+str(detail),
        procgen.Rock.get_rock_mesh, (1, detail))

    self.instance_template = np.zeros(0, dtype=[("model", np.float32, (4, 4))])

    self.renderID = self.shader.setData(self.meshdata,
                                        self.meshindices,
                                        self.instance_template,
                                        instance_buffer)
    self.instance_count = instance_count


  def display(self):
    if self.renderID is None:
      return
    self.shader.draw(gl.GL_TRIANGLES, self.renderID, self.instance_count)