c ++ - En anden OpenGL SuperBible 5. udgave opstillingsproblemer

Indlæg af Hanne Mølgaard Plasc

Problem



Nå, jeg har lige købt denne opengl superbible book (5. udgave). Desværre snublede jeg over på første kapitel som hvordan man opsætter selve opengl. Her er det skridt, jeg gjorde.


(1) Først og fremmest installerede jeg Microsoft Visual Studio 2010 C ++ Express .


(2) Jeg hentede de nødvendige biblioteker, som for denne downloadede jeg direkte fra det officielle websted for åbenbart superb: http://www.starstonesoftware.com/files/SB5.zip. Så tog jeg filerne ud i min lokale mappe. [7]


(3) Og så opretter jeg nyt tomt projekt.

Fil -> Ny -> Projekt -> Visual C ++ Installerede skabeloner -> Generelt -> Tomme projekter


(4) Tilføjelse af ekstra omfatter mapper vej til freeglut og gltools filer header.

Projekt -> Egenskaber -> Konfigurationsegenskaber -> (så sætter jeg konfigurationen=Alle konfigurationer) -> C/C ++ -> Generelt -> Yderligere inkluder mapper.

her tilføjer jeg to mapper:

(a) freeglut: [[min lokale vej]] \ SB5 \ freeglut-2.6.0 \ inkluderer

(b) gltools: [[min lokale vej]] \ SB5 \ Src \ GLTools \ inkluderer


(5) Tilføjelse af yderligere afhængigheder stien for også freeglut og gltools filer overskrift.

Projekt -> Egenskaber -> Konfigurationsegenskaber -> (så sætter jeg konfigurationen=Alle konfigurationer) -> Linker -> Input -> Yderligere afhængigheder.

(a) freeglut\_static.lib

(B) GLTools.lib


(6) Tilføjelse af bibliotekets mapper.

Projekt -> Egenskaber -> Konfigurationsegenskaber -> (så sætter jeg konfigurationen=Alle konfigurationer) -> VC ++ Directories -> Bibliotekskataloger.
Her indstiller jeg placeringen af ​​mapper af freeglut\_static.lib og GLTools.lib

(a) freeglut\_static.lib: [[min lokale vej]] \ SB5 \ freeglut-2.6.0 \ VisualStudio2008Static \ Udgivelse

(b) GLTools.lib: [[min lokale vej]] \ SB5 \ VisualStudio2008 \ GLTools \ Release


(7) Efter det kopierer jeg kildekoden (Triangle.cpp), men Jeg glemte ikke at medtage windows.h ved første linie.


// Triangle.cpp
// Our first OpenGL program that will just draw a triangle on the screen.

#include <Windows.h>
#include <GLTools.h>            // OpenGL toolkit
#include <GLShaderManager.h>    // Shader Manager Class

#ifdef \_\_APPLE\_\_
#include <glut/glut.h>          // OS X version of GLUT
#else
#define FREEGLUT\_STATIC
#include <GL/glut.h>            // Windows FreeGlut equivalent
#endif

GLBatch triangleBatch;  
GLShaderManager shaderManager;

///////////////////////////////////////////////////////////////////////////////
// Window has changed size, or has just been created. In either case, we need
// to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
    glViewport(0, 0, w, h);
}


///////////////////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering context. 
// This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
    // Blue background
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f );

    shaderManager.InitializeStockShaders();

    // Load up a triangle
    GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f, 
                          0.5f, 0.0f, 0.0f,
                          0.0f, 0.5f, 0.0f };

    triangleBatch.Begin(GL\_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(vVerts);
    triangleBatch.End();
}



///////////////////////////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
{
    // Clear the window with current clearing color
    glClear(GL\_COLOR\_BUFFER\_BIT | GL\_DEPTH\_BUFFER\_BIT | GL\_STENCIL\_BUFFER\_BIT);

    GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
    shaderManager.UseStockShader(GLT\_SHADER\_IDENTITY, vRed);
    triangleBatch.Draw();

    // Perform the buffer swap to display back buffer
    glutSwapBuffers();
}


///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
int main(int argc, char* argv[])
{
    gltSetWorkingDirectory(argv[0]);

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT\_DOUBLE | GLUT\_RGBA | GLUT\_DEPTH | GLUT\_STENCIL);
    glutInitWindowSize(800, 600);
    glutCreateWindow("Triangle");
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);

    GLenum err = glewInit();
    if (GLEW\_OK != err) {
        fprintf(stderr, "GLEW Error: \%s
", glewGetErrorString(err));
        return 1;
    }

    SetupRC();

    glutMainLoop();
    return 0;
}


(8) Efter trin 7 bygger jeg projektet og alt gik stadig glat. Her var byggesultatet:


1>------ Build started: Project: superbible1, Configuration: Debug Win32 ------
1>  main.cpp
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>GLTools.lib(GLBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'GLTools.lib(GLBatch.obj)' or at 'C:Documents and SettingsTonyMy DocumentsVisual Studio 2010Projectssuperbible1Debugvc90.pdb'; linking object as if no debug info
1>GLTools.lib(glew.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'GLTools.lib(glew.obj)' or at 'C:Documents and SettingsTonyMy DocumentsVisual Studio 2010Projectssuperbible1Debugvc90.pdb'; linking object as if no debug info
1>GLTools.lib(GLShaderManager.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'GLTools.lib(GLShaderManager.obj)' or at 'C:Documents and SettingsTonyMy DocumentsVisual Studio 2010Projectssuperbible1Debugvc90.pdb'; linking object as if no debug info
1>GLTools.lib(GLTools.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'GLTools.lib(GLTools.obj)' or at 'C:Documents and SettingsTonyMy DocumentsVisual Studio 2010Projectssuperbible1Debugvc90.pdb'; linking object as if no debug info
1>GLTools.lib(GLTriangleBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'GLTools.lib(GLTriangleBatch.obj)' or at 'C:Documents and SettingsTonyMy DocumentsVisual Studio 2010Projectssuperbible1Debugvc90.pdb'; linking object as if no debug info
1>  superbible1.vcxproj -> C:Documents and SettingsTonyMy DocumentsVisual Studio 2010Projectssuperbible1Debugsuperbible1.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========


(9) Problemet opstod, da jeg kørte programmet. Jeg får runtime fejl. Der var en advarselsdialog med denne besked:


Unhandled exception at 0x00000000 in superbible1.exe: 0xC0000005: Access violation reading location 0x00000000.


Når jeg vælger at bryde programmet, blev markøren stoppet i denne linje:


   GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f, 
                          0.5f, 0.0f, 0.0f,
                          0.0f, 0.5f, 0.0f };


Nå, hvis jeg skifter denne kode med en anden simpel kode (fra openGLL redbook). For eksempel som dette:


#define FREEGLUT\_STATIC
#include <Windows.h>
#include <GLglut.h>

void display(void)

{
    /* clear window */

     glClear(GL\_COLOR\_BUFFER\_BIT); 


    /* draw unit square polygon */

    glBegin(GL\_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();

    /* flush GL buffers */

    glFlush(); 

}


void init()
{

    /* set clear color to black */

    /*  glClearColor (0.0, 0.0, 0.0, 0.0); */
    /* set fill  color to white */

    /*  glColor3f(1.0, 1.0, 1.0); */

    /* set up standard orthogonal view with clipping */
    /* box as cube of side 2 centered at origin */
    /* This is default view and these statement could be removed */

    /* glMatrixMode (GL\_PROJECTION);
    glLoadIdentity ();
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);  */
}

int main(int argc, char** argv)
{

    /* Initialize mode and open a window in upper left corner of screen */
    /* Window title is name of program (arg[0]) */

    /* You must call glutInit before any other OpenGL/GLUT calls */
    glutInit(&argc,argv); 
    glutInitDisplayMode (GLUT\_SINGLE | GLUT\_RGB);  
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0); 
    glutCreateWindow("simple"); 
    glutDisplayFunc(display);
    init();
    glutMainLoop();

}


Ansøgningen kan køre godt. Så jeg troede måske, at der var noget galt med koden eller sandsynligvis var der noget, jeg savner. Så kan nogen hjælpe?

Bedste reference


GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f, ... kan ikke være problemet. MenVisuals grønne debugging cursor viser NEXT-linjen, der vil blive udført, så jeg formoder at det er shaderManager.InitializeStockShaders (); det går ned.


Jeg har ingen anelse om, hvad dette gør, men det læser sikkert filer ... sørg for at det finder dem. Især kører .exe direkte fra Explorer fra en mappe, der synes at give mening, afhængigt af indholdet af zip.

Andre referencer 1


Jeg er lige begyndt på dette også.


Hvis du vil arbejde gennem alle eksemplerne, er det bedre at kopiere alle Freeglut/GLTools .h og .lib filer til de relevante VC ++ 2010-kataloger.


Du skal stadig medtage windows.h i kilden og skal stadig specifikt angive VC ++ 2010 brug GLTools.lib (Linker, Input, Additional Dependancies).


Dette
forklarer tilsyneladende, hvordan man kan slippe af med alle pdb-fejlene, hvis de forstyrrer dig. [8]