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])
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)
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)
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()
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)
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
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()