2012-10-10 2 views
2

OpenGL Super Bible 4 판에서 OpenGL을 사용하는 방법을 배우려하지만 Visual Studio 2010에서 예제 코드 중 하나를 복사하려고 할 때마다 a "Open_GL.exe - 시스템 오류 : libGLESv2.dll이 컴퓨터에 없기 때문에 프로그램을 시작할 수 없습니다". 이 .dll은 내 컴퓨터의 어딘가에 있지만 VS쪽으로 사용할 수있는 방법을 모릅니다. 그러나 사이트의 미리 빌드 된 바이너리는 작동합니다. 참조OpenGL을 사용하는 코드를 컴파일하는 동안 libGLESv2.dll을 찾을 수 없습니다.

내가 사용하는 코드 :

// Block.cpp 
// OpenGL SuperBible, Chapter 1 
// Demonstrates an assortment of basic 3D concepts 
// Program by Richard S. Wright Jr. 

#include "../../shared/gltools.h" // OpenGL toolkit 
#include "../../shared/math3d.h" 
#include <math.h> 

// Keep track of effects step 
int nStep = 0; 


// Lighting data 
GLfloat lightAmbient[] = { 0.2f, 0.2f, 0.2f, 1.0f }; 
GLfloat lightDiffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f }; 
GLfloat lightSpecular[] = { 0.9f, 0.9f, 0.9f }; 
GLfloat materialColor[] = { 0.8f, 0.0f, 0.0f }; 
GLfloat vLightPos[] = { -80.0f, 120.0f, 100.0f, 0.0f }; 
GLfloat ground[3][3] = { { 0.0f, -25.0f, 0.0f }, 
        { 10.0f, -25.0f, 0.0f }, 
        { 10.0f, -25.0f, -10.0f } }; 

GLuint textures[4]; 





// Called to draw scene 
void RenderScene(void) 
{ 
M3DMatrix44f mCubeTransform; 
M3DVector4f pPlane; 


// Clear the window with current clearing color 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glShadeModel(GL_SMOOTH); 
glEnable(GL_NORMALIZE); 

glPushMatrix(); 

// Draw plane that the cube rests on 
glDisable(GL_LIGHTING); 
if(nStep == 5) 
    { 
    glColor3ub(255,255,255); 
    glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D, textures[0]); 
    glBegin(GL_QUADS); 
     glTexCoord2f(0.0f, 0.0f); 
     glVertex3f(-100.0f, -25.3f, -100.0f); 
     glTexCoord2f(0.0f, 1.0f); 
     glVertex3f(-100.0f, -25.3f, 100.0f);   
     glTexCoord2f(1.0f, 1.0f); 
     glVertex3f(100.0f, -25.3f, 100.0f); 
     glTexCoord2f(1.0f, 0.0f); 
     glVertex3f(100.0f, -25.3f, -100.0f); 
    glEnd(); 
    } 
else 
    { 
    glColor3f(0.0f, 0.0f, 0.90f); // Blue 
    glBegin(GL_QUADS); 
     glVertex3f(-100.0f, -25.3f, -100.0f); 
     glVertex3f(-100.0f, -25.3f, 100.0f);   
     glVertex3f(100.0f, -25.3f, 100.0f); 
     glVertex3f(100.0f, -25.3f, -100.0f); 
    glEnd(); 
    } 


// Set drawing color to Red 
glColor3f(1.0f, 0.0f, 0.0f); 

// Enable, disable lighting 
if(nStep > 2) 
    { 
    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LEQUAL); 
    glEnable(GL_COLOR_MATERIAL); 

    glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); 
    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); 
    glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular); 
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 
    glMaterialfv(GL_FRONT, GL_SPECULAR,lightSpecular); 
    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materialColor); 
    glMateriali(GL_FRONT, GL_SHININESS,128); 
    } 

// Move the cube slightly forward and to the left 
glTranslatef(-10.0f, 0.0f, 10.0f); 

switch(nStep) 
    { 
    // Just draw the wire framed cube 
    case 0: 
     glutWireCube(50.0f); 
     break; 

    // Same wire cube with hidden line removal simulated 
    case 1: 
     // Front Face (before rotation) 
     glBegin(GL_LINES); 
      glVertex3f(25.0f,25.0f,25.0f); 
      glVertex3f(25.0f,-25.0f,25.0f); 

      glVertex3f(25.0f,-25.0f,25.0f); 
      glVertex3f(-25.0f,-25.0f,25.0f); 

      glVertex3f(-25.0f,-25.0f,25.0f); 
      glVertex3f(-25.0f,25.0f,25.0f); 

      glVertex3f(-25.0f,25.0f,25.0f); 
      glVertex3f(25.0f,25.0f,25.0f); 
     glEnd(); 

     // Top of cube 
     glBegin(GL_LINES); 
      // Front Face 
      glVertex3f(25.0f,25.0f,25.0f); 
      glVertex3f(25.0f,25.0f,-25.0f); 

      glVertex3f(25.0f,25.0f,-25.0f); 
      glVertex3f(-25.0f,25.0f,-25.0f); 

      glVertex3f(-25.0f,25.0f,-25.0f); 
      glVertex3f(-25.0f,25.0f,25.0f); 

      glVertex3f(-25.0f,25.0f,25.0f); 
      glVertex3f(25.0f,25.0f,25.0f); 
     glEnd(); 

     // Last two segments for effect 
     glBegin(GL_LINES); 
      glVertex3f(25.0f,25.0f,-25.0f); 
      glVertex3f(25.0f,-25.0f,-25.0f); 

      glVertex3f(25.0f,-25.0f,-25.0f); 
      glVertex3f(25.0f,-25.0f,25.0f); 
     glEnd(); 

     break; 

    // Uniform colored surface, looks 2D and goofey 
    case 2: 
     glutSolidCube(50.0f); 
     break; 

    case 3: 
     glutSolidCube(50.0f); 
     break; 

    // Draw a shadow with some lighting 
    case 4: 
     glGetFloatv(GL_MODELVIEW_MATRIX, mCubeTransform); 
     glutSolidCube(50.0f); 
     glPopMatrix(); 

     // Disable lighting, we'll just draw the shadow as black 
     glDisable(GL_LIGHTING); 

     glPushMatrix(); 

     m3dGetPlaneEquation(pPlane, ground[0], ground[1], ground[2]); 
     m3dMakePlanarShadowMatrix(mCubeTransform, pPlane, vLightPos); 
     //MakeShadowMatrix(ground, lightpos, cubeXform); 
     glMultMatrixf(mCubeTransform); 

     glTranslatef(-10.0f, 0.0f, 10.0f);   

     // Set drawing color to Black 
     glColor3f(0.0f, 0.0f, 0.0f); 

     glutSolidCube(50.0f); 
     break; 

    case 5: 
     glColor3ub(255,255,255); 
     glGetFloatv(GL_MODELVIEW_MATRIX, mCubeTransform); 

     // Front Face (before rotation) 
     glBindTexture(GL_TEXTURE_2D, textures[1]); 
     glBegin(GL_QUADS); 
      glTexCoord2f(1.0f, 1.0f); 
      glVertex3f(25.0f,25.0f,25.0f); 
      glTexCoord2f(1.0f, 0.0f); 
      glVertex3f(25.0f,-25.0f,25.0f); 
      glTexCoord2f(0.0f, 0.0f); 
      glVertex3f(-25.0f,-25.0f,25.0f); 
      glTexCoord2f(0.0f, 1.0f); 
      glVertex3f(-25.0f,25.0f,25.0f); 
     glEnd(); 

     // Top of cube 
     glBindTexture(GL_TEXTURE_2D, textures[2]); 
     glBegin(GL_QUADS); 
      // Front Face 
      glTexCoord2f(0.0f, 0.0f); 
      glVertex3f(25.0f,25.0f,25.0f); 
      glTexCoord2f(1.0f, 0.0f); 
      glVertex3f(25.0f,25.0f,-25.0f); 
      glTexCoord2f(1.0f, 1.0f); 
      glVertex3f(-25.0f,25.0f,-25.0f); 
      glTexCoord2f(0.0f, 1.0f); 
      glVertex3f(-25.0f,25.0f,25.0f); 
     glEnd(); 

     // Last two segments for effect 
     glBindTexture(GL_TEXTURE_2D, textures[3]); 
     glBegin(GL_QUADS); 
      glTexCoord2f(1.0f, 1.0f); 
      glVertex3f(25.0f,25.0f,-25.0f); 
      glTexCoord2f(1.0f, 0.0f); 
      glVertex3f(25.0f,-25.0f,-25.0f); 
      glTexCoord2f(0.0f, 0.0f); 
      glVertex3f(25.0f,-25.0f,25.0f); 
      glTexCoord2f(0.0f, 1.0f); 
      glVertex3f(25.0f,25.0f,25.0f); 
     glEnd(); 


     glPopMatrix(); 

     // Disable lighting, we'll just draw the shadow as black 
     glDisable(GL_LIGHTING); 
     glDisable(GL_TEXTURE_2D); 

     glPushMatrix(); 

     m3dGetPlaneEquation(pPlane, ground[0], ground[1], ground[2]); 
     m3dMakePlanarShadowMatrix(mCubeTransform, pPlane, vLightPos); 
     glMultMatrixf(mCubeTransform);   

     glTranslatef(-10.0f, 0.0f, 10.0f);   

     // Set drawing color to Black 
     glColor3f(0.0f, 0.0f, 0.0f); 
     glutSolidCube(50.0f); 
     break; 

    } 

glPopMatrix(); 

// Flush drawing commands 
glutSwapBuffers(); 
} 

// This function does any needed initialization on the rendering 
// context. 
void SetupRC() 
{ 
    GLbyte *pBytes; 
    GLint nWidth, nHeight, nComponents; 
    GLenum format; 

// Black background 
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 

    glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_MODULATE); 
    glGenTextures(4, textures); 

// Load the texture objects 
    pBytes = gltLoadTGA("floor.tga", &nWidth, &nHeight, &nComponents, &format); 
    glBindTexture(GL_TEXTURE_2D, textures[0]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexImage2D(GL_TEXTURE_2D,0,nComponents,nWidth, nHeight, 0, 
    format, GL_UNSIGNED_BYTE, pBytes); 
free(pBytes); 

pBytes = gltLoadTGA("Block4.tga", &nWidth, &nHeight, &nComponents, &format); 
    glBindTexture(GL_TEXTURE_2D, textures[1]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexImage2D(GL_TEXTURE_2D,0,nComponents,nWidth, nHeight, 0, 
    format, GL_UNSIGNED_BYTE, pBytes); 
free(pBytes); 

pBytes = gltLoadTGA("block5.tga", &nWidth, &nHeight, &nComponents, &format); 
    glBindTexture(GL_TEXTURE_2D, textures[2]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexImage2D(GL_TEXTURE_2D,0,nComponents,nWidth, nHeight, 0, 
    format, GL_UNSIGNED_BYTE, pBytes); 
free(pBytes); 

pBytes = gltLoadTGA("block6.tga", &nWidth, &nHeight, &nComponents, &format); 
    glBindTexture(GL_TEXTURE_2D, textures[3]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexImage2D(GL_TEXTURE_2D,0,nComponents,nWidth, nHeight, 0, 
    format, GL_UNSIGNED_BYTE, pBytes); 
free(pBytes); 
    } 

void KeyPressFunc(unsigned char key, int x, int y) 
{ 
if(key == 32) 
    { 
    nStep++; 

    if(nStep > 5) 
     nStep = 0; 
    } 

// Refresh the Window 
glutPostRedisplay(); 
} 


void ChangeSize(int w, int h) 
{ 
// Calculate new clipping volume 
GLfloat windowWidth; 
GLfloat windowHeight; 

// Prevent a divide by zero, when window is too short 
// (you cant make a window of zero width). 
if(h == 0) 
    h = 1; 

// Keep the square square 
if (w <= h) 
    { 
    windowHeight = 100.0f*(GLfloat)h/(GLfloat)w; 
    windowWidth = 100.0f; 
    } 
else 
    { 
    windowWidth = 100.0f*(GLfloat)w/(GLfloat)h; 
    windowHeight = 100.0f; 
    } 

    // Set the viewport to be the entire window 
    glViewport(0, 0, w, h); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 

// Set the clipping volume 
glOrtho(-100.0f, windowWidth, -100.0f, windowHeight, -200.0f, 200.0f); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

glLightfv(GL_LIGHT0,GL_POSITION, vLightPos); 

glRotatef(30.0f, 1.0f, 0.0f, 0.0f); 
glRotatef(330.0f, 0.0f, 1.0f, 0.0f); 
} 

int main(int argc, char* argv[]) 
{ 
glutInit(&argc, argv); 
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 
glutInitWindowSize(800, 600); 
glutCreateWindow("3D Effects Demo"); 
glutReshapeFunc(ChangeSize); 
glutKeyboardFunc(KeyPressFunc); 
glutDisplayFunc(RenderScene); 

SetupRC(); 

glutMainLoop(); 
glDeleteTextures(4,textures); 
return 0; 
} 

답변

0

I do have this .dll somewhere on my computer

libGLESv2.dll는 의심의 OpenGL ES 2.0의 구현처럼 들린다. 코드는 데스크톱 OpenGL 용으로 작성되었으므로 코드를 실행하지 않습니다.

즉, 잘못된 라이브러리에 연결하고 있습니다. Windows에서는 OpenGL32.lib으로 연결해야합니다.

+0

아, 감사합니다. 대신에 그 도서관을 찾고있을거야! – user1732860

+0

OpenGL32.lib를 사용하여 문제가 해결되었습니다. 다시 한 번 감사드립니다. – user1732860

관련 문제