def __init__(self): self.shader = Sphere2Shader() self.atoms = AtomList() self.atoms.load_line( "ATOM 1 C MOL 1 -1.597 0.768 6.992 inf inf") self.atoms.load_line( "ATOM 2 N MOL 1 -1.586 -0.581 6.688 inf inf") self.atoms.load_line( "ATOM 3 C1 MOL 1 -2.832 -1.358 6.759 inf inf") self.atoms.load_line( "ATOM 4 C2 MOL 1 -0.407 -1.203 6.316 inf inf") for atom in self.atoms: atom.colorizer = color.ColorByRasmolCpk() # self.atom_attributes = atom_attributes # self.index_array = numpy.array( [ x for x in range(len(self.atoms)) ] , dtype='uint32') # self.is_initialized = False
class Sphere2TestScene(Actor): "Demonstrates side by side use of immediate mode and OpenGL 3.0 style" def __init__(self): self.shader = Sphere2Shader() self.atoms = AtomList() self.atoms.load_line( "ATOM 1 C MOL 1 -1.597 0.768 6.992 inf inf") self.atoms.load_line( "ATOM 2 N MOL 1 -1.586 -0.581 6.688 inf inf") self.atoms.load_line( "ATOM 3 C1 MOL 1 -2.832 -1.358 6.759 inf inf") self.atoms.load_line( "ATOM 4 C2 MOL 1 -0.407 -1.203 6.316 inf inf") for atom in self.atoms: atom.colorizer = color.ColorByRasmolCpk() # self.atom_attributes = atom_attributes # self.index_array = numpy.array( [ x for x in range(len(self.atoms)) ] , dtype='uint32') # self.is_initialized = False def init_gl(self): if self.is_initialized: return # Atom indices self.atom_index_buffer = glGenBuffers(1) glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.atom_index_buffer) glBufferData(GL_ELEMENT_ARRAY_BUFFER, self.index_array, GL_STATIC_DRAW) # self.atom_attributes.init_gl() # glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) glBindBuffer(GL_ARRAY_BUFFER, 0) self.is_initialized = True def paint_gl(self, camera=None, renderer=None): if not self.is_initialized: self.init_gl() # First square direct mode glColor3d(1,1,0) glBegin(GL_TRIANGLE_STRIP) glVertex3d(-3, 1, 0) glVertex3d(-3,-1, 0) glVertex3d(-1, 1, 0) glVertex3d(-1,-1, 0) glEnd() # second square uses shader """ glBegin(GL_TRIANGLE_STRIP) glVertex3d( 1, 1, 0) glVertex3d( 1,-1, 0) glVertex3d( 3, 1, 0) glVertex3d( 3,-1, 0) glEnd() """ # New way with 1.50 self.shader.radius_scale = 1.0 self.shader.radius_offset = 0.0 with self.shader: # Activate buffer objects self.atom_attributes.paint_gl() # Use integer indices to access atom sphere data glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.atom_index_buffer) glDrawElements(GL_POINTS, len(self.index_array), GL_UNSIGNED_INT, None) # clean up glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) glBindBuffer(GL_ARRAY_BUFFER, 0)