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.
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):