0

我对 Visual Studio 和 C++ 也很陌生。我一直在尝试从 Ed Angels 的 Interactive Computer Graphics A Top-Down Approach with OpenGL 中获取 Sierpinski Gasket 示例,特别是第 2 章示例 1 Visual C++ 项目,但我遇到了一些我无法解决的问题似乎解决或找到解决办法。我遇到的问题是,当我在 VS2012 中运行它时,窗口会立即关闭并出现错误,类似于它找不到 vshader21.glsl。当我从调试文件夹中的 6E Test.exe 运行它时,它可以正常打开,创建一个窗口,但它不显示任何三角形,只是一个空白的白色框。我已经下载了最新版本的 GLEW 和 freeglut,我很肯定我把所有东西都放在了正确的地方。

示例项目包括:Angel.h、vec.h、mat.h、CheckError.h、example1.cpp、InitShader.cpp、vshader21.glsl、fshader21.glsl

我相信错误来自 example1.cpp 行 GLuint program = InitShader("vshader21.glsl", "fshader21.glsl"); 没有找到文件但我已将 .glsl 添加到调试文件夹并更改了路径以转到项目属性工作目录中的调试文件夹。关于如何解决此问题的任何建议或解决方案?

#include "Angel.h"

const int NumPoints = 5000;

void
init( void )
{

    vec2 points[NumPoints];

    // Specifiy the vertices for a triangle
    vec2 vertices[3] = {
        vec2( -1.0, -1.0 ), vec2( 0.0, 1.0 ), vec2( 1.0, -1.0 )
    };

    // Select an arbitrary initial point inside of the triangle
    points[0] = vec2( 0.25, 0.50 );

    // compute and store N-1 new points
    for ( int i = 1; i < NumPoints; ++i ) {
        int j = rand() % 3;   // pick a vertex at random

        // Compute the point halfway between the selected vertex
        //   and the previous point
        points[i] = ( points[i - 1] + vertices[j] ) / 2.0;
    }

    // Create a vertex array object
    GLuint vao;
    glGenVertexArrays( 1, &vao );
    glBindVertexArray( vao );

    // Create and initialize a buffer object
    GLuint buffer;
    glGenBuffers( 1, &buffer );
    glBindBuffer( GL_ARRAY_BUFFER, buffer );
    glBufferData( GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW );

    // Load shaders and use the resulting shader program
    GLuint program = InitShader( "vshader21.glsl", "fshader21.glsl" );
    glUseProgram( program );

    // Initialize the vertex position attribute from the vertex shader
    GLuint loc = glGetAttribLocation( program, "vPosition" );
    glEnableVertexAttribArray( loc );
    glVertexAttribPointer( loc, 2, GL_FLOAT, GL_FALSE, 0,
                           BUFFER_OFFSET(0) );

    glClearColor( 1.0, 1.0, 1.0, 1.0 ); // white background
}

void
display( void )
{
    glClear( GL_COLOR_BUFFER_BIT );     // clear the window
    glDrawArrays( GL_POINTS, 0, NumPoints );    // draw the points
    glFlush();
}

void
keyboard( unsigned char key, int x, int y )
{
    switch ( key ) {
    case 033:
        exit( EXIT_SUCCESS );
        break;
    }
}

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

    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_RGBA );
    glutInitWindowSize( 512, 512 );

    // If you are using freeglut, the next two lines will check if 
    // the code is truly 3.2. Otherwise, comment them out

     glutInitContextVersion( 3, 1 );
     glutInitContextProfile( GLUT_CORE_PROFILE );

    glutCreateWindow( "Sierpinski Gasket" );

    glewInit();

    init();

    glutDisplayFunc( display );
    glutKeyboardFunc( keyboard );

    glutMainLoop();
    return 0;
}

更新这是当我按 F5 运行它时它告诉我的。我的 GLEW 版本是 1.10.0,freeglut 是 2.8.1-1

“6E test.exe”(Win32):加载“C:\Users\Robert\Documents\6E test\Debug\6E test.exe”。已加载符号。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\ntdll.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\kernel32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):加载“C:\Users\Robert\Documents\6E test\Debug\freeglut.dll”。模块是在没有符号的情况下构建的。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\user32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\gdi32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\lpk.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\usp10.dll”。无法找到或打开 PDB 文件。“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\msvcrt.dll”。无法找到或打开 PDB 文件。“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\advapi32.dll”。无法找到或打开 PDB 文件。“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\sechost.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\rpcrt4.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\sspicli.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\cryptbase.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\opengl32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\glu32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\ddraw.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\dciman32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\setupapi.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\cfgmgr32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\oleaut32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\ole32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\devobj.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\dwmapi.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\winmm.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Users\Robert\Documents\6E test\Debug\glew32.dll”。模块是在没有符号的情况下构建的。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\msvcp110d.dll”。已加载符号。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\msvcr110d.dll”。已加载符号。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\imm32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\msctf.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\nvinit.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\uxtheme.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\ig7icd32.dll”。无法找到或打开 PDB 文件。

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\version.dll”。无法找到或打开 PDB 文件。

'6E test.exe' (Win32): 卸载 'C:\Windows\SysWOW64\version.dll'

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\ole32.dll”。无法找到或打开 PDB 文件。

'6E test.exe' (Win32): 卸载 'C:\Windows\SysWOW64\ole32.dll'

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\ole32.dll”。无法找到或打开 PDB 文件。

'6E test.exe' (Win32): 卸载 'C:\Windows\SysWOW64\ole32.dll'

“6E test.exe”(Win32):已加载“C:\Windows\SysWOW64\clbcatq.dll”。无法找到或打开 PDB 文件。

程序“[6244] 6E test.exe”已退出,代码为 1 (0x1)。

4

1 回答 1

1

在启用桌面合成的较新版本的 Microsoft Windows 中,您不能使用单缓冲窗口绘图。即使您的着色器加载机制正常工作,您也会遇到更大的问题,即输出不可见。事实上,从你的问题描述来看,我认为你已经遇到了这个问题。

请查看此问题以获取有关问题和解决方案的更详细说明。

于 2013-09-05T00:11:06.533 回答