Beispiel #1
0
def window_space(win):
    modelview_mat = bgl.Buffer(bgl.GL_DOUBLE, 16)
    projection_mat = bgl.Buffer(bgl.GL_DOUBLE, 16)
    bgl.glGetDoublev(bgl.GL_MODELVIEW_MATRIX, modelview_mat)
    bgl.glGetDoublev(bgl.GL_PROJECTION_MATRIX, projection_mat)

    matrix_mode = bgl.Buffer(bgl.GL_INT, 1)
    bgl.glGetIntegerv(bgl.GL_MATRIX_MODE, matrix_mode)

    viewport = bgl.Buffer(bgl.GL_INT, 4)
    bgl.glGetIntegerv(bgl.GL_VIEWPORT, viewport)

    bgl.glViewport(0, 0, win.width, win.height)
    bgl.glMatrixMode(bgl.GL_PROJECTION)
    bgl.glLoadIdentity()
    ofs = -0.01
    bgl.glOrtho(ofs, win.width + ofs, ofs, win.height + ofs, -100, 100)
    bgl.glMatrixMode(bgl.GL_MODELVIEW)
    bgl.glLoadIdentity()
    bgl.glMatrixMode(matrix_mode[0])

    yield

    bgl.glViewport(*viewport)

    bgl.glMatrixMode(bgl.GL_PROJECTION)
    bgl.glLoadMatrixd(projection_mat)
    bgl.glMatrixMode(bgl.GL_MODELVIEW)
    bgl.glLoadMatrixd(modelview_mat)
    bgl.glMatrixMode(matrix_mode[0])
Beispiel #2
0
def window_space(win):
    modelview_mat = bgl.Buffer(bgl.GL_DOUBLE, 16)
    projection_mat = bgl.Buffer(bgl.GL_DOUBLE, 16)
    bgl.glGetDoublev(bgl.GL_MODELVIEW_MATRIX, modelview_mat)
    bgl.glGetDoublev(bgl.GL_PROJECTION_MATRIX, projection_mat)

    matrix_mode = bgl.Buffer(bgl.GL_INT, 1)
    bgl.glGetIntegerv(bgl.GL_MATRIX_MODE, matrix_mode)

    viewport = bgl.Buffer(bgl.GL_INT, 4)
    bgl.glGetIntegerv(bgl.GL_VIEWPORT, viewport)

    bgl.glViewport(0, 0, win.width, win.height)
    bgl.glMatrixMode(bgl.GL_PROJECTION)
    bgl.glLoadIdentity()
    ofs = -0.01
    bgl.glOrtho(ofs, win.width + ofs, ofs, win.height + ofs, -100, 100)
    bgl.glMatrixMode(bgl.GL_MODELVIEW)
    bgl.glLoadIdentity()
    bgl.glMatrixMode(matrix_mode[0])

    yield

    bgl.glViewport(*viewport)

    bgl.glMatrixMode(bgl.GL_PROJECTION)
    bgl.glLoadMatrixd(projection_mat)
    bgl.glMatrixMode(bgl.GL_MODELVIEW)
    bgl.glLoadMatrixd(modelview_mat)
    bgl.glMatrixMode(matrix_mode[0])
Beispiel #3
0
    def region_pixel_space(self):
        """with文、又はデコレータとして使用

        NOTE: Z値の範囲: near 〜 far
        perspective_matrix * vec4d / w: -1.0 〜 +1.0
        gluProject: 0.0 〜 +1.0
        POST_PIXEL: +100 〜 -100
        Z-Buffer: 0.0 〜 +1.0
        :rtype: GCM
        """

        modelview_mat = Buffer('double', (4, 4), bgl.GL_MODELVIEW_MATRIX)
        projection_mat = Buffer('double', (4, 4), bgl.GL_PROJECTION_MATRIX)
        matrix_mode = Buffer('int', 1, bgl.GL_MATRIX_MODE)

        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()  # 必須
        w, h = self.region_size
        # wmOrtho2_region_pixelspace(), wmOrtho2() 参照
        ofs = -0.01
        bgl.glOrtho(ofs, w + ofs, ofs, h + ofs, -100, 100)

        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()

        bgl.glMatrixMode(matrix_mode[0])

        try:
            yield
        finally:
            self._load_matrix(modelview_mat, projection_mat)
Beispiel #4
0
    def window_pixel_space(self):
        """with文、又はデコレータとして使用
        :rtype: GCM
        """

        win_width, win_height = self.window_size

        modelview_mat = Buffer('double', (4, 4), bgl.GL_MODELVIEW_MATRIX)
        projection_mat = Buffer('double', (4, 4), bgl.GL_PROJECTION_MATRIX)
        matrix_mode = Buffer('int', 1, bgl.GL_MATRIX_MODE)
        viewport = Buffer('int', 4, bgl.GL_VIEWPORT)

        bgl.glViewport(0, 0, win_width, win_height)
        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()
        ofs = -0.01
        bgl.glOrtho(ofs, win_width + ofs, ofs, win_height + ofs, -100, 100)
        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()
        bgl.glMatrixMode(matrix_mode[0])

        try:
            yield
        finally:
            bgl.glViewport(*viewport)
            self._load_matrix(modelview_mat, projection_mat)
Beispiel #5
0
    def draw(self):
        width = render.getWindowWidth()
        height = render.getWindowHeight()

        # 2D Projection
        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()
        bgl.glOrtho(0, width, height, 0, -1, 1)
        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()

        # 2D Shading
        bgl.glDisable(bgl.GL_CULL_FACE)
        bgl.glDisable(bgl.GL_LIGHTING)
        bgl.glDisable(bgl.GL_DEPTH_TEST)
        bgl.glShadeModel(bgl.GL_SMOOTH)

        # Line antialias
        bgl.glEnable(bgl.GL_LINE_SMOOTH)
        bgl.glHint(bgl.GL_LINE_SMOOTH_HINT, bgl.GL_NICEST)

        # 2D Blending (Alpha)
        bgl.glEnable(bgl.GL_BLEND)
        bgl.glBlendFunc(bgl.GL_SRC_ALPHA, bgl.GL_ONE_MINUS_SRC_ALPHA)

        if len(self.controls.values()) <= 0: return

        ctrls = sorted(self.controls.values(), key=lambda x: x.zorder)
        for c in ctrls:
            c.draw()
Beispiel #6
0
 def draw(self):
     width = render.getWindowWidth()
     height = render.getWindowHeight()
     
     # 2D Projection
     bgl.glMatrixMode(bgl.GL_PROJECTION)
     bgl.glLoadIdentity()
     bgl.glOrtho(0, width, height, 0, -1, 1)
     bgl.glMatrixMode(bgl.GL_MODELVIEW)
     bgl.glLoadIdentity()
     
     # 2D Shading
     bgl.glDisable(bgl.GL_CULL_FACE)
     bgl.glDisable(bgl.GL_LIGHTING)
     bgl.glDisable(bgl.GL_DEPTH_TEST)
     bgl.glShadeModel(bgl.GL_SMOOTH)
     
     # Line antialias
     bgl.glEnable(bgl.GL_LINE_SMOOTH)
     bgl.glHint(bgl.GL_LINE_SMOOTH_HINT, bgl.GL_NICEST)
     
     # 2D Blending (Alpha)
     bgl.glEnable(bgl.GL_BLEND)
     bgl.glBlendFunc(bgl.GL_SRC_ALPHA, bgl.GL_ONE_MINUS_SRC_ALPHA)
     
     if len(self.controls.values()) <= 0: return
     
     ctrls = sorted(self.controls.values(), key=lambda x: x.zorder)
     for c in ctrls:
         c.draw()
Beispiel #7
0
    def prepare_2d(self):
        """PRE_VIEW,POST_VIEWのcallbackでscreen座標系を用いて描画する場合に
        使用する。
        参照: ED_region_do_draw() -> ED_region_pixelspace() ->
        wmOrtho2_region_pixelspace()

        """
        self._modelview_bak_2d = Buffer('double', (4, 4),
                                        bgl.GL_MODELVIEW_MATRIX)
        self._projection_bak_2d = Buffer('double', (4, 4),
                                         bgl.GL_PROJECTION_MATRIX)
        matrix_mode = Buffer('int', 0, bgl.GL_MATRIX_MODE)

        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()  # 必須
        w, h = self.region_size
        # wmOrtho2_region_pixelspace(), wmOrtho2() 参照
        ofs = -0.01
        bgl.glOrtho(ofs, w + ofs, ofs, h + ofs, -100, 100)
        # bgl.glTranslated(GLA_PIXEL_OFS, GLA_PIXEL_OFS, 0.0)

        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()

        bgl.glMatrixMode(matrix_mode)
Beispiel #8
0
    def window_pixel_space(self):
        """with文、又はデコレータとして使用
        :rtype: GCM
        """

        win_width, win_height = self.window_size

        modelview_mat = Buffer('double', (4, 4), bgl.GL_MODELVIEW_MATRIX)
        projection_mat = Buffer('double', (4, 4), bgl.GL_PROJECTION_MATRIX)
        matrix_mode = Buffer('int', 1, bgl.GL_MATRIX_MODE)
        viewport = Buffer('int', 4, bgl.GL_VIEWPORT)

        bgl.glViewport(0, 0, win_width, win_height)
        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()
        ofs = -0.01
        bgl.glOrtho(ofs, win_width + ofs, ofs, win_height + ofs, -100, 100)
        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()
        bgl.glMatrixMode(matrix_mode[0])

        try:
            yield
        finally:
            bgl.glViewport(*viewport)
            self._load_matrix(modelview_mat, projection_mat)
Beispiel #9
0
    def region_pixel_space(self):
        """with文、又はデコレータとして使用

        NOTE: Z値の範囲: near 〜 far
        perspective_matrix * vec4d / w: -1.0 〜 +1.0
        gluProject: 0.0 〜 +1.0
        POST_PIXEL: +100 〜 -100
        Z-Buffer: 0.0 〜 +1.0
        :rtype: GCM
        """

        modelview_mat = Buffer('double', (4, 4), bgl.GL_MODELVIEW_MATRIX)
        projection_mat = Buffer('double', (4, 4), bgl.GL_PROJECTION_MATRIX)
        matrix_mode = Buffer('int', 1, bgl.GL_MATRIX_MODE)

        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()  # 必須
        w, h = self.region_size
        # wmOrtho2_region_pixelspace(), wmOrtho2() 参照
        ofs = -0.01
        bgl.glOrtho(ofs, w + ofs, ofs, h + ofs, -100, 100)

        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()

        bgl.glMatrixMode(matrix_mode[0])

        try:
            yield
        finally:
            self._load_matrix(modelview_mat, projection_mat)
Beispiel #10
0
    def prepare_2d(self):
        """PRE_VIEW,POST_VIEWのcallbackでscreen座標系を用いて描画する場合に
        使用する。
        参照: ED_region_do_draw() -> ED_region_pixelspace() ->
        wmOrtho2_region_pixelspace()

        """
        self._modelview_bak_2d = Buffer('double', (4, 4),
                                        bgl.GL_MODELVIEW_MATRIX)
        self._projection_bak_2d = Buffer('double', (4, 4),
                                         bgl.GL_PROJECTION_MATRIX)
        matrix_mode = Buffer('int', 0, bgl.GL_MATRIX_MODE)

        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()  # 必須
        w, h = self.region_size
        # wmOrtho2_region_pixelspace(), wmOrtho2() 参照
        ofs = -0.01
        bgl.glOrtho(ofs, w + ofs, ofs, h + ofs, -100, 100)
        # bgl.glTranslated(GLA_PIXEL_OFS, GLA_PIXEL_OFS, 0.0)

        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()

        bgl.glMatrixMode(matrix_mode)
Beispiel #11
0
    def afficher(self):
        """Affiche l'image"""
        VT = __class__.VT
        gl = __class__.gl
        bgl = __class__.bgl
        math = __class__.math

        if self.ok:

            id = self.VT_img.bindId

            if id:
                bgl.glMatrixMode(bgl.GL_PROJECTION)
                bgl.glLoadIdentity()
                vp = self.viewport
                bgl.glOrtho(vp[0], vp[1], vp[2], vp[3], -1.0, 1.0)

                bgl.glMatrixMode(bgl.GL_MODELVIEW)
                bgl.glLoadIdentity()

                bgl.glEnable(bgl.GL_TEXTURE_2D)
                bgl.glEnable(bgl.GL_BLEND)
                bgl.glBindTexture(bgl.GL_TEXTURE_2D, id)

                bgl.glTranslatef(self.bary[0], self.bary[1], 0)
                bgl.glRotatef(math.degrees(self.angle), 0.0, 0.0, 1.0)
                bgl.glTranslatef(-self.bary[0], -self.bary[1], 0)

                bgl.glBegin(bgl.GL_QUADS)
                col = self.couleur
                for i in range(len(self.texco)):
                    bgl.glColor4f(col[0], col[1], col[2], col[3])
                    bgl.glTexCoord2f(self.texco[i][0], self.texco[i][1])
                    bgl.glVertex2f(self.verco[i][0], self.verco[i][1])
                bgl.glEnd()

                bgl.glBindTexture(bgl.GL_TEXTURE_2D, 0)
            else:
                self.ok = False

        return
Beispiel #12
0
def draw_cube(context, r3d):
    
    #direction = r3d.view_rotation * mathutils.Vector((0.0, 0.0, -1.0))
    #position = r3d.view_matrix.inverted().translation
    
    #r3d.view_distance = 1;
    #r3d.view_camera_zoom = 1
    
    rad2deg = 360.0 / (math.pi * 2.0)
    rotation = r3d.view_rotation.to_euler()
    rotation.x = (rotation.x * rad2deg) + 180
    rotation.y = (rotation.y * rad2deg)
    rotation.z = (rotation.z * rad2deg)
    
    #r3d.view_rotation = mathutils.Euler((0.0, 0.0, 0.0), 'XYZ').to_quaternion()
    
    size = 1
    
    centerX = 0
    centerY = 0
    centerZ = 0
    
    #colors
    cTop = mathutils.Color((130.0/255.0, 130.0/255.0, 130.0/255.0))
    cBot = mathutils.Color((100.0/255.0, 100.0/255.0, 100.0/255.0))
    cLine = mathutils.Color((0.0/255.0, 0.0/255.0, 0.0/255.0))
    
    # BEGIN MATRIX
    bgl.glPushMatrix()
    bgl.glLoadIdentity()
    #bgl.glTranslated(0.0, 0.0, 0.0)
    bgl.glOrtho(-5, 5, -5, 5, 0.01, 100)
    
    bgl.glRotatef(rotation.x, 1.0, 0.0, 0.0)
    bgl.glRotatef(rotation.y, 0.0, 1.0, 0.0)
    bgl.glRotatef(rotation.z, 0.0, 0.0, 1.0)
    
    # FACES TEXT
    #font_id = 0
    #blf.position(font_id, 0, 0, 1)
    #blf.size(font_id, 10, 72)
    #blf.draw(font_id, "top")
    
    # QUADS
    bgl.glBegin(bgl.GL_QUADS)
    
    # top
    bgl.glColor3f(cTop.r, cTop.g, cTop.b)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ + size)
    
    # bottom
    bgl.glColor3f(cBot.r, cBot.g, cBot.b)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ - size)
    
    # left
    bgl.glColor3f(cBot.r, cBot.g, cBot.b)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ - size)
    bgl.glColor3f(cTop.r, cTop.g, cTop.b)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ + size)
    
    # right
    bgl.glColor3f(cBot.r, cBot.g, cBot.b)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ - size)
    bgl.glColor3f(cTop.r, cTop.g, cTop.b)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ + size)
    
    # front
    bgl.glColor3f(cBot.r, cBot.g, cBot.b)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ - size)
    bgl.glColor3f(cTop.r, cTop.g, cTop.b)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ + size)
    
    # back
    bgl.glColor3f(cBot.r, cBot.g, cBot.b)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glColor3f(cTop.r, cTop.g, cTop.b)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ + size)
    
    bgl.glEnd()
    
    # LINES
    bgl.glColor3f(cLine.r, cLine.g, cLine.b)
    bgl.glLineWidth(1)
    size = size * 1.01
    
    # top
    bgl.glBegin(bgl.GL_LINE_STRIP)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ + size)
    bgl.glEnd()
    
    # bottom
    bgl.glBegin(bgl.GL_LINE_STRIP)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glEnd()
    
    # left
    bgl.glBegin(bgl.GL_LINE_STRIP)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glEnd()
    
    # right
    bgl.glBegin(bgl.GL_LINE_STRIP)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glEnd()
    
    # front
    bgl.glBegin(bgl.GL_LINE_STRIP)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY + size, centerZ - size)
    bgl.glEnd()
    
    # back
    bgl.glBegin(bgl.GL_LINE_STRIP)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ - size)
    bgl.glVertex3f(centerX - size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ + size)
    bgl.glVertex3f(centerX + size, centerY - size, centerZ - size)
    bgl.glEnd()
    
    # END MATRIX
    bgl.glPopMatrix()