2015-09-14 115 views
1

我試圖學習PyOpenGL,並且我理解一些概念,除了「管道」「|」字符連接的東西。例如,這是一個立方體代碼:Python/PyOpenGL:管道

import pygame 
from pygame.locals import * 

from OpenGL.GL import * 
from OpenGL.GLU import * 

verticies = (
    (1, -1, -1), 
    (1, 1, -1), 
    (-1, 1, -1), 
    (-1, -1, -1), 
    (1, -1, 1), 
    (1, 1, 1), 
    (-1, -1, 1), 
    (-1, 1, 1) 
    ) 

edges = (
    (0,1), 
    (0,3), 
    (0,4), 
    (2,1), 
    (2,3), 
    (2,7), 
    (6,3), 
    (6,4), 
    (6,7), 
    (5,1), 
    (5,4), 
    (5,7) 
    ) 
def Cube(): 
    glBegin(GL_LINES) 
    for edge in edges: 
     for vertex in edge: 
      glVertex3fv(verticies[vertex]) 
    glEnd() 


def main(): 
    pygame.init() 
    display = (800,600) 
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL) 

    gluPerspective(45, (display[0]/display[1]), 0.1, 50.0) 

    glTranslatef(0.0,0.0, -5) 

    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

     glRotatef(1, 3, 1, 1) 
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) 
     Cube() 
     pygame.display.flip() 
     pygame.time.wait(10) 
main() 

我不能完全肯定GL_COLOR_BUFFER_BIT什麼| GL_DEPTH_BUFFER_BIT一個意思,或者DOUBLEBUF | OPENGL

我知道什麼是雙緩衝,但我仍然不完全瞭解這個或其他的東西是什麼意思。

回答

0

它們實際上只是整數常量。這是獲取用戶輸入的便捷方式。管道運算符(|)是整數的按位或。例如15 | 128 = 143,即00001111 | 10000000 = 10001111二進制。

這裏是如何實際上作品:

>>> from OpenGL.GL import * 
>>> type(GL_COLOR_BUFFER_BIT) 
OpenGL.constant.IntConstant 
>>> int(GL_COLOR_BUFFER_BIT) 
16384 
>>> bin(GL_COLOR_BUFFER_BIT) 
'0b100000000000000' 
>>> int(GL_DEPTH_BUFFER_BIT) 
256 
>>> bin(GL_DEPTH_BUFFER_BIT) 
'0b100000000' 
>>> int(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
16640 
>>> bin(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
'0b100000100000000'