-1

私は OpenGL を学んでいて、最初のプログラムを実行しようとしています。include、lib、および bin フォルダーにすべてのファイルを含めました。opengl32.lib;glut32.lib;glu32.lib; を追加しようとしました。構成プロパティ->リンカー->入力で、それも機能しませんでした。

Visual Studio 2012 を使用しています。

///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////

#include <iostream>
using namespace std;

#include <vgl.h>
#include <LoadShaders.h>

enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };

GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];

const GLuint NumVertices = 6;

//---------------------------------------------------------------------
//
// init
//

void
init(void)
{
    glGenVertexArrays(NumVAOs, VAOs);
    glBindVertexArray(VAOs[Triangles]);

    GLfloat vertices[NumVertices][2] = {
        { -0.90, -0.90 }, // Triangle 1
        { 0.85, -0.90 },
        { -0.90, 0.85 },
        { 0.90, -0.85 }, // Triangle 2
        { 0.90, 0.90 },
        { -0.85, 0.90 }
    };

    glGenBuffers(NumBuffers, Buffers);
    glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
                vertices, GL_STATIC_DRAW);

    ShaderInfo shaders[] = {
        { GL_VERTEX_SHADER, "triangles.vert" },
        { GL_FRAGMENT_SHADER, "triangles.frag" },
        { GL_NONE, NULL }
    };

    GLuint program = LoadShaders(shaders);
    glUseProgram(program);

    glVertexAttribPointer(vPosition, 2, GL_FLOAT,
    GL_FALSE, 0, BUFFER_OFFSET(0));

    glEnableVertexAttribArray(vPosition);
}

//---------------------------------------------------------------------
//
// display
//

void
display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBindVertexArray(VAOs[Triangles]);
    glDrawArrays(GL_TRIANGLES, 0, NumVertices);

    glFlush();
}

//---------------------------------------------------------------------
//
// main
//

int
main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(512, 512);
    glutInitContextVersion(4, 3);
    glutInitContextProfile(GLUT_CORE_PROFILE);
    glutCreateWindow(argv[0]);

    if (glewInit()) {
        cerr << "Unable to initialize GLEW ... exiting" << endl;
        exit(EXIT_FAILURE);
    }

    init();

    glutDisplayFunc(display);

    glutMainLoop();
}
4

3 に答える 3

6

LoadShaders()ヘッダーのみでない限り、そのためのlib(またはcpp)ファイルがありません。中身が分からないと何とも言えません。


アップデート:

本のソース コードを含む zip ファイルには、必要なものがすべて含まれています。

次のことを行う必要があります。

  • zip ファイルを覚えやすい場所 (「c:\openglbook」など) に解凍します。
  • Visual Studio 2012 でプロジェクトを開くか作成します。
  • メニュー「PROJECT」を開き、「[your project] Properties...」を選択します (またはAlt+を押しますF7)。
  • 構成ごとに次の手順を繰り返すか、左上の [すべての構成] を選択します。
  • 左側のツリーで [構成プロパティ] を開き、[VC++ ディレクトリ] を選択します。
  • c:\openglbook\include「インクルード ディレクトリ」に追加します。
  • c:\openglbook\lib「ライブラリ ディレクトリ」に追加します。
  • プロジェクトのプロパティを閉じます。
  • ファイル「c:\openglbook\lib\LoadShaders.cpp」をプロジェクト ファイルにコピーし、別のソース ファイルとして追加します。

これが完了すると、プロジェクトがビルドされます。GLUT関数などの依存関係がまだ不足している場合は、適切なライブラリを「lib」サブディレクトリから既知のリンカー ライブラリ リストに追加します。

于 2013-06-02T18:50:57.313 に答える
1

問題は、LoadShaders関数が本体を持たないことです (おそらく LoadShaders.h から)。の .cpp を見つけるか、LoadShaderslib にリンクします。

LoadShadersにライブラリがある場合、VS 2012 を使用しているため、プリプロセッサ ディレクティブを使用してライブラリをリンクできます。

#pragma comment( lib, "yourlibfilename.lib" )

あなたのlibが実際にあなたが言うところにあることを確認してください。既定では、Visual Studio は lib がソース ファイルの既定のフォルダーと同じフォルダーにあると想定します。

于 2013-06-02T18:54:28.800 に答える
0

ライブラリを追加するだけでLinker->Inputは不十分です。ライブラリが任意のディレクトリにあるため、リンカーはまだそれらを見つけられません。彼らがいるディレクトリを設定に追加しますLinker->General->additional library directories

于 2013-06-02T18:58:24.043 に答える