我无法运行第一个代码示例triangles.cpp。 我尝试了包含Xcode附带的GLUT和GL框架,并且已经搜索了足够多的内容,发现自己不可能自己解决这个问题。
假设我有一个全新的Mac OS X安装,并且我已经使用Xcode命令行工具进行了全新安装,请提供逐步说明以在该环境中运行triangles.cpp。
与此问题不同,我的首选项不是使用Cocoa、Objective-C或Swift。我的首选项是只使用C++/C。只有当我能够按照逐步说明并最终获得运行中的triangles.cpp程序时,答案才是正确的。
我偏好的系统是Mac OS X 10.9,但正确的答案可以假定为10.9、10.10或10.11。
谢谢。
///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;
#include "vgl.h"
#include "LoadShader.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]);
glewExperimental = GL_TRUE;
if (glewInit()) {
cerr << "Unable to initialize GLEW ... exiting" << endl;
exit(EXIT_FAILURE);
}
init();
glutDisplayFunc(display);
glutMainLoop();
}
编辑 1: 回复第一条评论,这是一个朴素的尝试。
- 在 Mac OS X 10.9.5 上打开 Xcode 5.1.1。
- 创建一个新的 C++ 命令行项目。
- 用 triangles.cpp 的内容覆盖 main.cpp 的内容。
- 单击项目 -> Build Phases -> Link Binary with Libraries
- 添加 OpenGL.framework 和 GLUT.framework
结果:“/Users/xxx/Desktop/Triangles/Triangles/main.cpp:10:10: 找不到 'vgl.h' 文件”
编辑 2: 添加了 vgh 翻译单元和 LoadShaders 翻译单元,还将 libFreeGlut.a 和 libGlew32.a 添加到我的项目编译/链接中。将所有 OpenGL 书籍的包含内容移动到我的项目源目录中。不得不更改几个 include 语句,以使用带引号的 include 替代带角括号的 include。感觉离成功更近了,但无法找到 LoadShader.h。请注意,OpenGL 下载中的翻译单元称为 LoadShaders(复数)。将 triangles.cpp 更改为引用 LoadShaders.h 可以解决 include 问题,但该翻译单元的内容似乎与从 triangles.cpp 调用的签名不匹配。
LoadShaders(shaders)
。shaders
已经是类型为ShaderInfo*
的变量。 - Marc Khadpe