Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 设置OpenGL红皮书项目时遇到问题_C++_Opengl 4 - Fatal编程技术网

C++ 设置OpenGL红皮书项目时遇到问题

C++ 设置OpenGL红皮书项目时遇到问题,c++,opengl-4,C++,Opengl 4,我试图下载OpenGL编程指南的示例:学习OpenGL的官方指南,4.5版,带SPIR-V,我试图导入库并将文件包含到我的Visual Studio解决方案中,以便我可以使用作者使用的相同文件创建OpenGL应用程序,但我不断遇到以下错误: LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library GLProgram.obj : error LNK

我试图下载OpenGL编程指南的示例:学习OpenGL的官方指南,4.5版,带SPIR-V,我试图导入库并将文件包含到我的Visual Studio解决方案中,以便我可以使用作者使用的相同文件创建OpenGL应用程序,但我不断遇到以下错误:

LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
GLProgram.obj : error LNK2019: unresolved external symbol gl3wInit referenced in function main
GLProgram.obj : error LNK2019: unresolved external symbol LoadShaders referenced in function "void __cdecl init(void)" (?init@@YAXXZ)
GLProgram.obj : error LNK2001: unresolved external symbol gl3wDrawArrays
GLProgram.obj : error LNK2001: unresolved external symbol gl3wBindBuffer
GLProgram.obj : error LNK2001: unresolved external symbol gl3wEnableVertexAttribArray
GLProgram.obj : error LNK2001: unresolved external symbol gl3wUseProgram
GLProgram.obj : error LNK2001: unresolved external symbol gl3wVertexAttribPointer
GLProgram.obj : error LNK2001: unresolved external symbol gl3wClearBufferfv
GLProgram.obj : error LNK2001: unresolved external symbol gl3wBindVertexArray
GLProgram.obj : error LNK2001: unresolved external symbol gl3wGenVertexArrays
GLProgram.obj : error LNK2001: unresolved external symbol gl3wBufferStorage
GLProgram.obj : error LNK2001: unresolved external symbol gl3wCreateBuffers
C:\Users\saada\Desktop\Visual Studio Projects\OpenGL Programming Guide\OpenGL\OpenGL SPIR-V\x64\Debug\OpenGL SPIR-V.exe : fatal error LNK1120: 12 unresolved externals
我所做的是将示例下载中的include和lib文件夹设置为我的项目的include目录,然后下载glfw3.lib文件并将其链接,但我似乎缺少gl3w的某些内容。如何修复,是否丢失了一些.lib文件?以下是我的代码,以备您需要:

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

#define BUFFER_OFFSET(a) ((void*)(a))

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.90f, -0.90f }, {  0.85f, -0.90f }, { -0.90f,  0.85f },  // Triangle 1
        {  0.90f, -0.85f }, {  0.90f,  0.90f }, { -0.85f,  0.90f }   // Triangle 2
    };

    glCreateBuffers(NumBuffers, Buffers);
    glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
    glBufferStorage(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 0);

    ShaderInfo  shaders[] =
    {
        { GL_VERTEX_SHADER, "media/shaders/triangles/triangles.vert" },
        { GL_FRAGMENT_SHADER, "media/shaders/triangles/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)
{
    static const float black[] = { 0.0f, 0.0f, 0.0f, 0.0f };

    glClearBufferfv(GL_COLOR, 0, black);

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

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

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

    GLFWwindow* window = glfwCreateWindow(800, 600, "Triangles", NULL, NULL);

    glfwMakeContextCurrent(window);
    gl3wInit();

    init();

    while (!glfwWindowShouldClose(window))
    {
        display();
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwDestroyWindow(window);

    glfwTerminate();
}
#包括
#包括
#定义缓冲区偏移量(a)((void*)(a))
enum VAO_id{三角形,NumVAOs};
枚举缓冲区_id{ArrayBuffer,NumBuffers};
枚举属性ID{vPosition=0};
GLuint VAOs[NumVAOs];
胶合缓冲区[NumBuffers];
常数GLuint numvitices=6;
//----------------------------------------------------------------------------
//
//初始化
//
无效的
初始(无效)
{
glGenVertexArrays(NumVAOs、VAOs);
glBindVertexArray(VAOs[三角形]);
GLfloat顶点[NumVertices][2]={
{-0.90f,-0.90f},{0.85f,-0.90f},{-0.90f,0.85f},//三角形1
{0.90f,-0.85f},{0.90f,0.90f},{-0.85f,0.90f}//三角形2
};
glCreateBuffers(NumBuffers,Buffers);
glBindBuffer(GL_ARRAY_BUFFER,Buffers[ArrayBuffer]);
glBufferStorage(GL_数组_BUFFER,sizeof(顶点),顶点,0);
着色器信息着色器[]=
{
{GL_VERTEX_SHADER,“media/shaders/triangles/triangles.vert”},
{GL_FRAGMENT_SHADER,“media/shaders/triangles/triangles.frag”},
{GL_NONE,NULL}
};
GLuint程序=加载着色器(着色器);
glUseProgram(程序);
GLVertexAttribute指针(位置,2,GL_浮点,
GL_FALSE,0,缓冲区_偏移量(0));
GlenableVertexAttributeArray(vPosition);
}
//----------------------------------------------------------------------------
//
//展示
//
无效的
显示(无效)
{
静态常量浮动黑[]={0.0f,0.0f,0.0f,0.0f};
glClearBufferfv(GL_颜色,0,黑色);
glBindVertexArray(VAOs[三角形]);
GLDRAWARRAY(GLU三角形,0,numvities);
}
//----------------------------------------------------------------------------
//
//主要
//
int main(int argc,字符**argv)
{
glfwInit();
GLFWwindow*window=glfwCreateWindow(800600,“三角形”,NULL,NULL);
glfwMakeContextCurrent(窗口);
gl3wInit();
init();
而(!glfwWindowShouldClose(窗口))
{
显示();
glfwSwapBuffers(窗口);
glfwPollEvents();
}
GLFW窗口(窗口);
glfwTerminate();
}
提前谢谢

更新:
我找到的解决方案是,不仅将我的库文件夹用作包含目录,而且还将该文件夹包含在我的项目中

您缺少gl3w的.lib。对不起,我不熟悉gl3w,但你确定它不是glew吗?Glew的用法和你在这里的用法一模一样。如果它是glew,请参阅此安装链接:然后在VS中链接它,就像您使用GLFW一样。书中的代码示例仅使用了gl3w,因此我认为这里应该使用的只能是gl3w,而不是glew。如果我使用glew,可能无法与其他文件完美配合,而且我认为它支持的不超过OpenGL 3.3,但如果我在这方面有错,您可以纠正我。啊,这很有趣,这里有一篇文章支持您刚才所说的:您是否使用此脚本生成了.h和.c文件?它提到可以静态或动态链接,这样您就可以查看静态链接。当我下载代码示例时,文件已经存在,所以我认为不需要运行脚本。但我还是会调查的。我已经调查过了,我找到了解决办法。将我的库文件夹包含在我的项目中,并将其用作包含文件夹。您缺少gl3w的.lib。对不起,我不熟悉gl3w,但你确定它不是glew吗?Glew的用法和你在这里的用法一模一样。如果它是glew,请参阅此安装链接:然后在VS中链接它,就像您使用GLFW一样。书中的代码示例仅使用了gl3w,因此我认为这里应该使用的只能是gl3w,而不是glew。如果我使用glew,可能无法与其他文件完美配合,而且我认为它支持的不超过OpenGL 3.3,但如果我在这方面有错,您可以纠正我。啊,这很有趣,这里有一篇文章支持您刚才所说的:您是否使用此脚本生成了.h和.c文件?它提到可以静态或动态链接,这样您就可以查看静态链接。当我下载代码示例时,文件已经存在,所以我认为不需要运行脚本。但我还是会调查的。我已经调查过了,我找到了解决办法。将我的库文件夹包含在我的项目中,并将其用作包含文件夹。