2014-02-13 7 views
0

py2pen을 사용하여 PyOpenGL 프로젝트의 실행 파일을 만들려고했는데 ... 그 문제는 실행 중이 아닙니다 ... exe가 실행되고 있지 않고이 로그를 받고 있습니다 :py2exe 및 PyOpenGL

Traceback (most recent call last): 
File "gl.py", line 1, in <module> 
ImportError: No module named OpenGL.GL 

setup.py은 다음과 같습니다

내 프로젝트는 다음과 같습니다
from distutils.core import setup 
import py2exe 

setup(windows=['gl.py'], 
     options={ 
      "py2exe": { 
       "includes": ["ctypes", "logging"], 
       "excludes": ["OpenGL"], 
       } 
      } 
    ) 

:

from OpenGL.GL import * 
from OpenGL.GLU import * 
import random 
from math import * 

import pygame 

import Image 
import sys 
import time 


sys.path += ['.'] 


pygame.init() 
pygame.display.set_mode((800,600), pygame.OPENGL|pygame.DOUBLEBUF) 

def jpg_file_write(name, number, data): 
    im = Image.frombuffer("RGBA", (800,600), data, "raw", "RGBA", 0, 0) 
    fnumber = "%05d" % number 
    im.save(name + fnumber + ".jpg") 


glEnable(GL_DEPTH_TEST) 


def createAndCompileShader(type,source): 
    shader=glCreateShader(type) 
    glShaderSource(shader,source) 
    glCompileShader(shader) 



    result=glGetShaderiv(shader,GL_COMPILE_STATUS) 

    if (result!=1): 
     raise Exception("Greska u kompajliranju... \nLog:\n"+glGetShaderInfoLog(shader)) 
    return shader 


vertex_shader=createAndCompileShader(GL_VERTEX_SHADER,""" 
varying vec3 v; 
varying vec3 N; 

void main(void) 
{ 

    v = gl_ModelViewMatrix * gl_Vertex; 
    N = gl_NormalMatrix * gl_Normal; 

    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 

} 
"""); 

fragment_shader=createAndCompileShader(GL_FRAGMENT_SHADER,""" 
varying vec3 N; 
varying vec3 v; 

void main(void) 
{ 
    vec3 L = gl_LightSource[0].position.xyz-v; 

    // "Lambert's law"? (see notes) 
    // Rather: faces will appear dimmer when struck in an acute angle 
    // distance attenuation 

    float Idiff = max(dot(normalize(L),N),0.0)*pow(length(L),-2.0); 

    gl_FragColor = vec4(0.5,0,0.5,1.0)+ // purple 
        vec4(1.0,1.0,1.0,1.0)*Idiff; // diffuse reflection 
} 
"""); 



program=glCreateProgram() 
glAttachShader(program,vertex_shader) 
glAttachShader(program,fragment_shader) 
glLinkProgram(program) 


try: 
    glUseProgram(program) 
except OpenGL.error.GLError: 
    print glGetProgramInfoLog(program) 
    raise 

done = False 

t=0 



glNewList(1,GL_COMPILE) 

glBegin(GL_QUADS) 

glColor3f(1,1,1) 

glNormal3f(0,0,-1) 
glVertex3f(-1, -1, -1) 
glVertex3f( 1, -1, -1) 
glVertex3f( 1, 1, -1) 
glVertex3f(-1, 1, -1) 

glNormal3f(0,0,1) 
glVertex3f(-1, -1, 1) 
glVertex3f( 1, -1, 1) 
glVertex3f( 1, 1, 1) 
glVertex3f(-1, 1, 1) 

glNormal3f(0,-1,0) 
glVertex3f(-1, -1, -1) 
glVertex3f( 1, -1, -1) 
glVertex3f( 1, -1, 1) 
glVertex3f(-1, -1, 1) 

glNormal3f(0,1,0) 
glVertex3f(-1, 1, -1) 
glVertex3f( 1, 1, -1) 
glVertex3f( 1, 1, 1) 
glVertex3f(-1, 1, 1) 

glNormal3f(-1,0,0)  
glVertex3f(-1, -1, -1) 
glVertex3f(-1, 1, -1) 
glVertex3f(-1, 1, 1) 
glVertex3f(-1, -1, 1)      

glNormal3f(1,0,0)   
glVertex3f( 1, -1, -1) 
glVertex3f( 1, 1, -1) 
glVertex3f( 1, 1, 1) 
glVertex3f( 1, -1, 1) 

glEnd() 
glEndList() 

while not done: 

    t=t+1 

    glMatrixMode(GL_PROJECTION) 
    glLoadIdentity() 
    gluPerspective(90,1,0.01,1000) 
    gluLookAt(sin(t/260.0)*4,cos(t/260.0)*4,cos(t/687.0)*3,0,0,0,0,1,0) 

    glClearColor(0.0, 0.0, 0.0, 1.0) 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) 

    glMatrixMode(GL_MODELVIEW) 



    ld=[sin(t/16.0)*4.0,sin(t/20.0)*4.0,cos(t/16.0)*4.0] 



    glLightfv(GL_LIGHT0,GL_POSITION,[ld[0],ld[1],ld[2]]); 



    glColor3f(1,1,1) 

    glLoadIdentity() 


    for i in range(-5,5): 
     for j in range(-5,5): 
      for k in range(-5,5): 
       glPushMatrix() 

       glTranslate(i,j,k) 
       glScale(0.1,0.1,0.1) 
       glCallList(1) 
       glPopMatrix() 

    pygame.display.flip() 

사람이 C가 무엇인지 알고 있나요

ausing이 문제?

답변

1

py2exe에서 패키지를 제외하면 결과 "dist"디렉토리에 패키지를 수동으로 추가해야합니다. 즉, 사이트 패키지 디렉토리의 OpenGL 패키지 전체를 py2exe dist 디렉토리로 복사합니다.

나는 명시 적 포함을 사용하여 PyOpenGL 3.1.0b2 및 py2exe를 실험했습니다. 사용하는 PyOpenGL의 해당 부분이 포함되어 있습니다. 결과는 blog post에 기록됩니다. 귀하의 목적 (파이 게임 사용)에서는 GLUT/GLE DLL의 부족에 대해 걱정할 필요가 없으며 실제 Win32 컴퓨터에서는 예상대로 작동 할 수 있습니다 (VM에서 테스트가 실패했습니다).