这是我第一次尝试学习OpenGL,我正在关注一本书的例子。我是在OS X 10.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()
函数时出现问题。没有它,窗口会出现,但背景为黑色。有了它,没有窗口。可以找到代码here。
更新
显然程序正在行GLuint program = InitShader("vertex.glsl", "fragment.glsl");
中退出,因为它没有找到着色器文件。如何告诉程序使用这些文件?我的意思是我在.glsl
和.h
所在的文件夹中有.cpp
个文件但是当Xcode构建项目时,可执行文件与.glsl
文件不在同一个位置。如何在Xcode中解决这个问题?
答案 0 :(得分:2)
GLSL文件在程序的运行时加载。所以不是XCode找不到文件,而是你的程序。最可能的原因是,您使用了文件的相对路径(例如在您提供的代码段中),但是使用与硬编码文件位置不匹配的工作路径启动程序。通常,程序二进制文件内置在专用的构建目录中。
快速解决方法是将GLSL文件复制到与二进制文件相同的目录中。适当的解决方案是将该场放置在一个众所周知的位置。在MacOS X中,您可以使用Application捆绑包。请参阅MacOS X开发人员文档,了解如何将应用程序资源放入Application包以及如何访问它们。 XCode还提供了将文件自动复制到生成的包中的工具。
答案 1 :(得分:1)
如果Xcode没有导入文件,那么通过转到文件选择器中的项目名称,构建阶段,复制捆绑资源并确保您的2,检查它是否将其添加到资源文件夹中文件在那里。
答案 2 :(得分:1)
按照以下步骤操作:
在左侧面板中选择项目。
选择目标,然后选择Build Phases
你应该点击一个名为Add Build Phase
将出现一个您必须选择文件的框(有一个+
个小符号)。并确保您选择了Destination: Products directory
构建项目,运行它,现在它应该工作!!