Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Macos Xcode可执行文件找不到glsl文件_Macos_Opengl_Xcode4.5_Glut - Fatal编程技术网

Macos Xcode可执行文件找不到glsl文件

Macos Xcode可执行文件找不到glsl文件,macos,opengl,xcode4.5,glut,Macos,Opengl,Xcode4.5,Glut,这是我第一次尝试学习OpenGL,我正在学习一本书的示例。我是在OSX10.8下用Xcode做的。代码如下: #include "Angel.h" const int numPoints = 5000; typedef vec2 point2; void init(){ point2 points[numPoints]; point2 vertices[3] = { point2(-1.0, -1.0), point2(0.0, 1.0), point2(1

这是我第一次尝试学习OpenGL,我正在学习一本书的示例。我是在OSX10.8下用Xcode做的。代码如下:

#include "Angel.h"

const int numPoints = 5000;
typedef vec2 point2;

void init(){

    point2 points[numPoints];
    point2 vertices[3] = {
        point2(-1.0, -1.0), point2(0.0, 1.0), point2(1.0, -1.0)
    };

    points[0] = point2(0.25, 0.5);

    for (int k = 1; k < numPoints; k++) {
        int j = rand()%3;
        points[k] = (points[k-1]+vertices[j])/2.0;
    }

    GLuint program = InitShader("vertex.glsl", "fragment.glsl");
    glUseProgram(program);

    GLuint abuffer;
    glGenVertexArraysAPPLE(1, &abuffer);
    glBindVertexArrayAPPLE(abuffer);

    GLuint buffer;
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);

    GLuint location = glGetAttribLocation(program, "vPosition");
    glEnableVertexAttribArray(location);
    glVertexAttribPointer(location, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));

    glClearColor(1.0, 1.0, 1.0, 1.0);

}


void display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawArrays(GL_POINTS, 0, numPoints);
    glFlush();
}

int main(int argc, char** argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(640, 480);

    glutCreateWindow("Sierpinski Gasket");

    init();
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}
它编译。但是当我尝试执行它时,窗口不会出现。当我调用init函数时,问题就出现了。如果没有它,窗口将显示,但背景为黑色。有了它,就没有窗户了。代码可以找到

更新


显然,程序在GLuint program=initshadertex.glsl,fragment.glsl;因为它找不到着色器文件。我如何告诉程序使用这些文件?我的意思是,我的.glsl文件与.h和.cpp文件在同一个文件夹中,但当Xcode构建项目时,可执行文件与.glsl文件不在同一个位置。如何在Xcode中解决此问题?

GLSL文件在程序运行时加载。所以不是XCode找不到文件,而是你的程序。最可能的原因是,您为文件使用了相对路径,如您提供的代码段中所示,但启动程序时使用的工作路径与硬编码文件位置不匹配。通常,您的程序二进制文件被构建到一个专用的构建目录中


快速修复方法是将GLSL文件复制到与二进制文件相同的目录中。正确的解决方案是将文件放置在一个众所周知的位置。在MacOS X中,您可以使用应用程序包来实现这一点。请参阅MacOS X developer文档中的如何将应用程序资源放入应用程序包以及如何访问它们。XCode还提供了自动将文件复制到生成包中的工具。

GLSL文件在程序运行时加载。所以不是XCode找不到文件,而是你的程序。最可能的原因是,您为文件使用了相对路径,如您提供的代码段中所示,但启动程序时使用的工作路径与硬编码文件位置不匹配。通常,您的程序二进制文件被构建到一个专用的构建目录中


快速修复方法是将GLSL文件复制到与二进制文件相同的目录中。正确的解决方案是将文件放置在一个众所周知的位置。在MacOS X中,您可以使用应用程序包来实现这一点。请参阅MacOS X developer文档中的如何将应用程序资源放入应用程序包以及如何访问它们。XCode还提供了自动将文件复制到生成的捆绑包中的工具。

如果XCode没有导入文件,请在文件选择器、构建阶段、复制捆绑包资源中转到您的项目名称,检查是否将其添加到资源文件夹,并确保您的两个文件都在其中。

如果XCode没有导入文件,然后通过在文件选择器、构建阶段、复制捆绑资源中转到您的项目名称,检查是否正在将其添加到资源文件夹中,并确保您的两个文件都在其中。

遵循以下步骤:

选择左侧面板上的项目

选择目标,然后选择构建阶段

您应该在那里找到一个名为AddBuildPhase的按钮

将出现一个框,您必须在其中选择文件,并有一个小+符号。并确保您选择了目标:产品目录

建立项目,运行它,现在它应该工作

遵循以下步骤:

选择左侧面板上的项目

选择目标,然后选择构建阶段

您应该在那里找到一个名为AddBuildPhase的按钮

将出现一个框,您必须在其中选择文件,并有一个小+符号。并确保您选择了目标:产品目录


建立项目,运行它,现在它应该工作

是的,你完全正确,这不是Xcode,这是一个找不到文件的程序。我的错误。你能指出一些关于应用程序包的信息吗,我已经搜索过了,但似乎所有的东西都是面向iOS的。。。尝试了一些,但无法将我的文件复制到execdirectory@BRabbit27:参见此处和@BRabbit27和–顺便说一句,我只知道捆绑包的存在。我只是用谷歌和一些有根据的猜测在苹果开发者文档中找到了哪些链接。是的,你完全正确,不是Xcode,是程序没有找到文件。我的错误。你能指出一些关于应用程序包的信息吗,我已经搜索过了,但似乎所有的东西都是面向iOS的。。。尝试了一些,但无法将我的文件复制到execdirectory@BRabbit27:参见此处和@BRabbit27和–顺便说一句,我只知道捆绑包的存在。我只是用谷歌和一些有根据的猜测在苹果开发者文档中找到了哪些链接。我找到了复制包资源,但仍然没有复制文件。您的着色器是否在复制包资源中?是的,它们在复制包资源阶段中?是否可以向我们显示函数InitShader的代码?确定。我找到了复印包
但是仍然没有复制文件。那么您的着色器是否在复制包资源中?是的,它们在复制包资源阶段中可以向我们展示函数InitShader的代码吗?