Macos Sierpinsky三角形OpenGL

Macos Sierpinsky三角形OpenGL,macos,opengl,xcode4.5,Macos,Opengl,Xcode4.5,我正在努力学习OpenGL。我尝试了一些代码,但是程序的输出只是一个白色的屏幕,输出应该是Sierpinski三角形 有什么不对劲吗?我正在开发MacOSX10.8和Xcode 4.5 #include "Angel.h" #include <iostream> const int numPoints = 5000; typedef vec2 point2; void init(){ point2 points[numPoints]; point2 vertic

我正在努力学习OpenGL。我尝试了一些代码,但是程序的输出只是一个白色的屏幕,输出应该是Sierpinski三角形

有什么不对劲吗?我正在开发MacOSX10.8和Xcode 4.5

#include "Angel.h"
#include <iostream>

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 | GLUT_3_2_CORE_PROFILE);

    glutInitWindowSize(640, 480);

    glutCreateWindow("Sierpinski Gasket");

    init();

    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}
#包括“angle.h”
#包括
常量int numPoints=5000;
typedef vec2 point2;
void init(){
点2点[numPoints];
点2顶点[3]={
点2(-1.0,-1.0),点2(0.0,1.0),点2(1.0,-1.0)
};
点[0]=点2(0.25,0.5);
for(int k=1;k
在您的示例中,您似乎错过了着色器程序附件阶段。当使用可编程管道时,您必须提供至少一个编译到着色器程序中的顶点和片段着色器。然后在渲染循环中,在调用glDrawArrays()之前或者任何其他与几何体相关的方法,您必须通过glUseProgram绑定着色器程序。否则,您的GPU不知道如何处理顶点数据。请看一看很棒的教程,其中详细介绍了开始使用现代OpenGL所需的所有知识。我想,在OSX上工作时,您必须对一些API方法使用扩展,因为如果我没记错的话,它支持GL3.2


如何附加着色器?我真的什么都不知道

好吧,听着,你必须知道如何去做,否则你就无法继续编写OpenGL应用程序。仔细阅读教程,牢牢掌握着色器程序的工作原理以及为什么需要它们。

最后! 代码已完成,着色器已按其应有的方式附加

包含在
angle.h
中的
.h
文件有问题,它应该是
,而不是
。第二件要更改的事情是删除函数
glgenvertexaryapple
glbinvertexaryapple
APPLE
后缀


显然,苹果和他们的OpenGL实现存在问题,可能不是所有的东西都与他们的兼容,但我将这个话题告诉了专家,如果有人在那里,请澄清这一点。

你将te着色器程序附加到哪里?没有它就无法工作。如何附加着色器?我真的什么都不知道。我认为这行代码是GLuint program=InitShader(“vertex.glsl”,“fragment.glsl”);glUseProgram(程序)与着色器相关的地方。@MichaelIV这本书是为初学者编写的,但代码是为windows编写的,我只是想让它们在OS X下运行。@BRabbit27您是对的,
InitShader
例程负责使着色器工作所需的所有步骤(包括附加着色器)。这是Angel的书中讨论过的快捷方式。@radical7所以我可能遗漏了什么,我的意思是,我反复检查代码。我的意思是,我真的很喜欢读那本书,但我不能构建示例,这让我有点沮丧。我试着从你建议的教程开始,看起来很有趣,谢谢。我有一个问题,建设的东西很难<代码>===构建freeglut(调试)===创建库创建obj/debug freeglut_回调.c在src/freeglut_回调中包含的文件中。c:28:在包含在包含在包含在包含在包含的文件中的/GL/freeglut.h:17:include/GL/freeglut std.h:120:10:致命错误:“未找到GL/GL.h”文件#包含^1生成的错误。make[1]:***[obj/Debug/freeglut\U callbacks.o]错误1 make:***[freeglut]错误2正如我所说,我在Mac上工作,我知道OpenGL头是
OpenGL/OpenGL.h
U.G.会发生,不是吗?