diff options
Draw 3d geometry outline
-rw-r--r-- | ldc_3d_gl_interop.py | 66 |
1 files changed, 53 insertions, 13 deletions
diff --git a/ldc_3d_gl_interop.py b/ldc_3d_gl_interop.py index 483ea1a..7fb5d5c 100644 --- a/ldc_3d_gl_interop.py +++ b/ldc_3d_gl_interop.py @@ -15,11 +15,11 @@ from OpenGL.GL import shaders from pyrr import matrix44 lattice_x = 64 -lattice_y = 32 -lattice_z = 32 +lattice_y = 64 +lattice_z = 64 updates_per_frame = 20 -particle_count = 50000 +particle_count = 10000 lid_speed = 0.001 relaxation_time = 0.515 @@ -55,7 +55,7 @@ def get_projection(width, height): projection = matrix44.create_perspective_projection(45.0, width/height, 0.1, 1000.0) look = matrix44.create_look_at( - eye = [lattice_x/2, -2*lattice_y, lattice_z/2], + eye = [lattice_x/2, -2*lattice_y, 1.2*lattice_z], target = [lattice_x/2, lattice_y/2, lattice_z/2], up = [0, 0, 1]) rotate = matrix44.create_from_axis_rotation(axis=[0,1,0], theta=0.2) @@ -81,12 +81,11 @@ lbm = LBM(D3Q19) window = glut_window(fullscreen = False) -vertex_shader = shaders.compileShader(Template(""" +particle_shader = shaders.compileShader(Template(""" #version 430 layout (location=0) in vec4 particles; - -out vec3 color; + out vec3 color; uniform mat4 projection; @@ -109,6 +108,19 @@ void main() { color = fire(1.0-particles[3]); }""").substitute({}), GL_VERTEX_SHADER) +vertex_shader = shaders.compileShader(Template(""" +#version 430 + +layout (location=0) in vec4 vertex; + out vec3 color; + +uniform mat4 projection; + +void main() { + gl_Position = projection * vertex; + color = vec3(1.0,1.0,1.0); +}""").substitute({}), GL_VERTEX_SHADER) + fragment_shader = shaders.compileShader(""" #version 430 @@ -118,8 +130,10 @@ void main(){ gl_FragColor = vec4(color.xyz, 0.0); }""", GL_FRAGMENT_SHADER) -shader_program = shaders.compileProgram(vertex_shader, fragment_shader) -projection_id = shaders.glGetUniformLocation(shader_program, 'projection') +particle_program = shaders.compileProgram(particle_shader, fragment_shader) +projection_id = shaders.glGetUniformLocation(particle_program, 'projection') + +geometry_program = shaders.compileProgram(vertex_shader, fragment_shader) lattice = Lattice( descriptor = D3Q19, @@ -139,9 +153,9 @@ particles = Particles( lattice.queue, lattice.memory.float_type, numpy.mgrid[ - 6*lattice.geometry.size_x//8:7*lattice.geometry.size_x//8:10j, - lattice.geometry.size_y//8:7*lattice.geometry.size_y//8:particle_count/100j, - 6*lattice.geometry.size_z//8:7*lattice.geometry.size_z//8:10j, + 8*lattice.geometry.size_x//10:9*lattice.geometry.size_x//10:10j, + lattice.geometry.size_y//10:9*lattice.geometry.size_y//10:particle_count/100j, + 8*lattice.geometry.size_z//10:9*lattice.geometry.size_z//10:10j, ].reshape(3,-1).T) def on_display(): @@ -160,13 +174,39 @@ def on_display(): particles.gl_particles.bind() - shaders.glUseProgram(shader_program) + shaders.glUseProgram(particle_program) glUniformMatrix4fv(projection_id, 1, False, numpy.ascontiguousarray(projection)) glVertexPointer(4, GL_FLOAT, 0, particles.gl_particles) glPointSize(point_size) glEnable(GL_POINT_SMOOTH) glDrawArrays(GL_POINTS, 0, particles.count) + shaders.glUseProgram(geometry_program) + glUniformMatrix4fv(projection_id, 1, False, numpy.ascontiguousarray(projection)) + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) + glBegin(GL_POLYGON) + glVertex3f(0,0,0) + glVertex3f(lattice_x,0,0) + glVertex3f(lattice_x,lattice_y,0) + glVertex3f(0,lattice_y,0) + glEnd() + glBegin(GL_POLYGON) + glVertex3f(0,0,lattice_z) + glVertex3f(lattice_x,0,lattice_z) + glVertex3f(lattice_x,lattice_y,lattice_z) + glVertex3f(0,lattice_y,lattice_z) + glEnd() + glBegin(GL_LINES) + glVertex3f(0,0,0) + glVertex3f(0,0,lattice_z) + glVertex3f(lattice_x,0,0) + glVertex3f(lattice_x,0,lattice_z) + glVertex3f(lattice_x,lattice_y,0) + glVertex3f(lattice_x,lattice_y,lattice_z) + glVertex3f(0,lattice_y,0) + glVertex3f(0,lattice_y,lattice_z) + glEnd() + glutSwapBuffers() def on_reshape(width, height): |