Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
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)