2010-04-02 47 views
1

所以我有一些openGL的代碼(例如這樣的代碼)如何在編譯時運行OpenGL代碼?

/* FUNCTION:  YCamera :: CalculateWorldCoordinates 
    ARGUMENTS:  x   mouse x coordinate 
         y   mouse y coordinate 
         vec  where to store coordinates 
    RETURN:   n/a 
    DESCRIPTION:  Convert mouse coordinates into world coordinates 
*/ 
void YCamera :: CalculateWorldCoordinates(float x, float y, YVector3 *vec) { // START GLint viewport[4]; GLdouble mvmatrix[16], projmatrix[16]; 

GLint real_y; 
GLdouble mx, my, mz; 

glGetIntegerv(GL_VIEWPORT, viewport); 
glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); 
glGetDoublev(GL_PROJECTION_MATRIX, projmatrix); 

real_y = viewport[3] - (GLint) y - 1; // viewport[3] is height of window in pixels 
gluUnProject((GLdouble) x, (GLdouble) real_y, 1.0, mvmatrix, projmatrix, viewport, &mx, &my, &mz); 

/*  'mouse' is the point where mouse projection reaches FAR_PLANE. 
     World coordinates is intersection of line(camera->mouse) with plane(z=0) (see LaMothe 306) 

     Equation of line in 3D: 
       (x-x0)/a = (y-y0)/b = (z-z0)/c   

     Intersection of line with plane: 
       z = 0 
       x-x0 = a(z-z0)/c <=> x = x0+a(0-z0)/c <=> x = x0 -a*z0/c 
       y = y0 - b*z0/c 

*/ 
double lx = fPosition.x - mx; 
double ly = fPosition.y - my; 
double lz = fPosition.z - mz; 
double sum = lx*lx + ly*ly + lz*lz; 
double normal = sqrt(sum); 
double z0_c = fPosition.z/(lz/normal); 

vec->x = (float) (fPosition.x - (lx/normal)*z0_c); 
vec->y = (float) (fPosition.y - (ly/normal)*z0_c); 
vec->z = 0.0f; 
} 

我要運行它,但用了預編譯。有沒有辦法做這樣的事情

+0

沒有「預編譯」或沒有「首先編譯」? – 2010-04-02 22:58:46

回答

2

這可能與LWJGL(OpenGL綁定)和REPLScala(運行在JVM上)。我想像Clojure/Jython等其他語言也可以處理這個請求 - 無論是通過LWJGL還是Jogl。對於許多不需要(顯式)編譯或自帶REPL和/或「集成IDE」的大量語言,也有OpenGL綁定。

C通常總是需要編譯,但我確實找到了這個: http://neugierig.org/software/c-repl/我確信有其他類似的項目。

快樂編碼。