def draw_axis(self, axis, label): if self.minimum_covering_sphere is None: self.update_minimum_covering_sphere() s = self.minimum_covering_sphere scale = max(max(s.box_max()), abs(min(s.box_min()))) gltbx.fonts.ucs_bitmap_8x13.setup_call_lists() gl.glDisable(gl.GL_LIGHTING) if self.settings.black_background: gl.glColor3f(1.0, 1.0, 1.0) else: gl.glColor3f(0.0, 0.0, 0.0) gl.glLineWidth(1.0) gl.glBegin(gl.GL_LINES) gl.glVertex3f(0.0, 0.0, 0.0) gl.glVertex3f(axis[0] * scale, axis[1] * scale, axis[2] * scale) gl.glEnd() gl.glRasterPos3f(0.5 + axis[0] * scale, 0.2 + axis[1] * scale, 0.2 + axis[2] * scale) gltbx.fonts.ucs_bitmap_8x13.render_string(label) gl.glEnable(gl.GL_LINE_STIPPLE) gl.glLineStipple(4, 0xAAAA) gl.glBegin(gl.GL_LINES) gl.glVertex3f(0.0, 0.0, 0.0) gl.glVertex3f(-axis[0] * scale, -axis[1] * scale, -axis[2] * scale) gl.glEnd() gl.glDisable(gl.GL_LINE_STIPPLE)
def set_lights(self): if self.flag_use_lights: gl.glMatrixMode(gl.GL_MODELVIEW) gl.glPushMatrix() gl.glLoadIdentity() gl.glEnable(gl.GL_LIGHTING) gl.glEnable(gl.GL_LIGHT0) gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, self.light0_position) gl.glPopMatrix()
def enable(self, flag=True): from gltbx import gl if self.has_rescale_normal: mode = self.GL_RESCALE_NORMAL else: assert self.fallback_to_normalize,\ "Rescale normals only available from OpenGL 1.2 onward" mode = gl.GL_NORMALIZE if flag: gl.glEnable(mode) else: gl.glDisable(mode)
def setup_fog(self): if self.flag_show_fog: near, far = self.get_clipping_distances() fog_start = near + self.fog_scale_factor * (far - near) fog_end = max(fog_start + 5, far) gl.glMatrixMode(gl.GL_MODELVIEW) gl.glEnable(gl.GL_FOG) gl.glFogi(gl.GL_FOG_MODE, gl.GL_LINEAR) gl.glFogf(gl.GL_FOG_START, fog_start) gl.glFogf(gl.GL_FOG_END, fog_end) b = self.background_rgb gl.glFogfv(gl.GL_FOG_COLOR, [b[0], b[1], b[2], 1.0]) else: gl.glDisable(gl.GL_FOG)
def draw_cell(self, axes, color): astar, bstar, cstar = axes[0], axes[1], axes[2] gltbx.fonts.ucs_bitmap_8x13.setup_call_lists() gl.glDisable(gl.GL_LIGHTING) gl.glColor3f(*color) gl.glLineWidth(2.0) gl.glBegin(gl.GL_LINES) gl.glVertex3f(0.0, 0.0, 0.0) gl.glVertex3f(*astar.elems) gl.glVertex3f(0.0, 0.0, 0.0) gl.glVertex3f(*bstar.elems) gl.glVertex3f(0.0, 0.0, 0.0) gl.glVertex3f(*cstar.elems) gl.glEnd() gl.glRasterPos3f(*(1.01 * astar).elems) gltbx.fonts.ucs_bitmap_8x13.render_string("a*") gl.glRasterPos3f(*(1.01 * bstar).elems) gltbx.fonts.ucs_bitmap_8x13.render_string("b*") gl.glRasterPos3f(*(1.01 * cstar).elems) gltbx.fonts.ucs_bitmap_8x13.render_string("c*") gl.glEnable(gl.GL_LINE_STIPPLE) gl.glLineStipple(4, 0xAAAA) farpoint = astar + bstar + cstar # a* face gl.glBegin(gl.GL_LINE_LOOP) gl.glVertex3f(*farpoint.elems) gl.glVertex3f(*(farpoint - bstar).elems) gl.glVertex3f(*(farpoint - bstar - cstar).elems) gl.glVertex3f(*(farpoint - cstar).elems) gl.glEnd() # b* face gl.glBegin(gl.GL_LINE_LOOP) gl.glVertex3f(*farpoint.elems) gl.glVertex3f(*(farpoint - astar).elems) gl.glVertex3f(*(farpoint - astar - cstar).elems) gl.glVertex3f(*(farpoint - cstar).elems) gl.glEnd() # c* face gl.glBegin(gl.GL_LINE_LOOP) gl.glVertex3f(*farpoint.elems) gl.glVertex3f(*(farpoint - bstar).elems) gl.glVertex3f(*(farpoint - bstar - astar).elems) gl.glVertex3f(*(farpoint - astar).elems) gl.glEnd() gl.glDisable(gl.GL_LINE_STIPPLE)
def draw_spheres(self, solid=False): gl.glMatrixMode(gl.GL_MODELVIEW) gray = 0.3 gl.glColor3f(gray, gray, gray) if solid: gl.glEnable(gl.GL_LIGHTING) gl.glEnable(gl.GL_LIGHT0) gl.glLightfv(gl.GL_LIGHT0, gl.GL_AMBIENT, [1, 1, 1, 1]) gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, [0, 0, 1, 0]) gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA) gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, [1, 1, 1, 0.5]) sphere = gltbx.util.SolidSphere grid = 50 else: sphere = gltbx.util.WireSphere grid = 20 for i, (x, r) in enumerate(self.spheres): gl.glPushMatrix() gl.glTranslated(*(x)) sphere(radius=r, slices=grid, stacks=grid) gl.glPopMatrix() if solid: gl.glDisable(gl.GL_LIGHTING) gl.glDisable(gl.GL_LIGHT0) gl.glDisable(gl.GL_BLEND)
def setup_lighting(self): if self.flag_use_lights: gl.glEnable(gl.GL_LIGHTING) gl.glEnable(gl.GL_LIGHT0) gl.glEnable(gl.GL_BLEND) # gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA) gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ZERO) gl.glLightModeli(gl.GL_LIGHT_MODEL_TWO_SIDE, gl.GL_TRUE) gl.glLightfv(gl.GL_LIGHT0, gl.GL_AMBIENT, [0.0, 0.0, 0.0, 1.0]) gl.glLightfv(gl.GL_LIGHT0, gl.GL_DIFFUSE, [1, 1, 1, 1]) gl.glLightfv(gl.GL_LIGHT0, gl.GL_SPECULAR, [0.5, 0.5, 0.5, 1.0])