使用OpenGL和GLFW的简单三角形[重复]

2024-03-16

我编写了一个小程序来使用顶点缓冲区显示一个简单的三角形。对于我使用 glfw 的窗口,我的环境是 Mac 10.9,XCode 5。

窗口看起来是黑色的,但三角形不是油漆。

这里是代码:

#include <GLFW/glfw3.h>
#include <OpenGL/gl.h>
#include <iostream>

int main(int argc, const char * argv[])
{
    GLFWwindow* window;
    if (!glfwInit())
    {
        return -1;
    }

    glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 1);
    glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    window = glfwCreateWindow(640, 480, "Hello Triangle", NULL, NULL);
    if (!window) 
    {
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);

    GLfloat verts[] =
    {
        0.0f,  0.5f,  0.0f,
        0.5f, -0.5f,  0.0f,
        -0.5f, -0.5f,  0.0f
    };

    //Generate a buffer id
    GLuint vboID;

    //Create a buffer on GPU memory
    glGenBuffers(1, &vboID);

    //Bind an arraybuffer to the ID
    glBindBuffer(GL_ARRAY_BUFFER, vboID);

    // Fill that buffer with the client vertex
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);

    //Enable attributes
    glEnableVertexAttribArray(0);

    // Setup a pointer to the attributes
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    while (!glfwWindowShouldClose(window))
    {
        glDrawArrays(GL_TRIANGLES, 0, 3);

        glfwPollEvents();
        glfwSwapBuffers(window);
    }

    glfwTerminate();
    return 0;
}

您正在为渲染选择 OpenGL 核心配置文件:

glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

您的代码缺少一些符合核心配置文件的内容:

  • 您需要实施着色器程序。 Core Profile 不再支持旧的固定管道,并且要求您在 GLSL 中实现自己的着色器。详细解释如何执行此操作超出了答案的范围,但您将使用类似的调用glCreateProgram, glCreateShader, glShaderSource, glCompileShader, glAttachShader, glLinkProgram。您应该能够在网上和书籍中找到材料。
  • 您需要使用顶点数组对象(VAO)。抬头glGenVertexArrays and glBindVertexArray.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用OpenGL和GLFW的简单三角形[重复] 的相关文章

随机推荐

  • 如何在wpf画布控件中添加动态设计的用户控件时获取高度和宽度?

    您好 我正在开发一个 wpf 应用程序 我正在画布中添加 myUserControl 对象 我需要高度和添加的用户控制 现在的问题是用户控件是动态设计的 我正在创建网格并根据用户配置添加行和列 并且我在高度和宽度上给出自动 所以我在画布中添
  • 如何解决React redux中的数据加载问题

    我试图弄清楚当数据仍在加载时如何管理 显示此组件 我在这种情况下使用react redux 有什么解决这个问题的建议吗 虽然我用延迟加载来包装它 但在这种情况下似乎并没有那么有效 对此有何建议 动作 js export const getC
  • 如何从 Eclipse 中的接口导航到实现类? [复制]

    这个问题在这里已经有答案了 假设我有 interface Foo void doStuff class FooImpl implements Foo public void doStuff stuff 当我看见myFoo doStuff 在
  • 在带有数组的单个函数中多次调用“useVal” - 意外行为

    我打电话给我的useArr在单个函数调用中多次调用函数 每次致电useArr 我正在将新的价值推向现有的arr功能 我用一个令人震惊的每个电话pause功能 而不是渲染字符串abcde以逐步 间隔的方式 它只是覆盖前一个字母 我对引擎盖下的
  • Jenkins Github 插件 - 触发参数化构建

    我有一个 自由式项目 Jenkins 作业 它有一个参数 GIT BRANCH这样我就可以手动或通过 GitHub hook 触发它 问题是 GitHub 插件似乎无法正确识别 设置推送的分支 当我查看 Jenkins 构建上的 GitHu
  • 我可以编写一个 CSS 选择器来选择不具有特定类或属性的元素吗?

    我想编写一个 CSS 选择器规则来选择所有元素don t有一定的班级 例如 给定以下 HTML h1 class printable Example h1
  • React-Native:哪种自动化 CI 工具最好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 React Native 社区 你们使用什么 CI 工具 我们的团队构建了一个react native ios应用程序 我们还有一个单独的测试团
  • 恢复发送至自部署合约的BNB

    我正在尝试创建 BOT 因此在 BSC 中从 eatamask 创建并部署了一个合约 我向该合约发送了一些 BNB 来检查 但没有成功 我怎样才能拿回BNB 感谢帮助 因为我对此很陌生 除非您在合约中具有允许您提取资金的自定义功能 否则它们
  • 如果 URL 是 https,Python urllib2 会给出“网络无法访问错误”

    我正在尝试使用 urllib2 库获取一些网址 a urllib2 urlopen http www google com ret a read 上面的代码工作正常 并给出了预期的结果 但是当我创建 url https 时 它会给出 网络无
  • 将文本插入活动迷你缓冲区

    我试图在运行外部命令后将文本插入到迷你缓冲区中 例如 call interactively eval expression insert blah 当然 问题是 eval expression 在用户输入之前不会返回 我的最终目标是添加一些
  • Xcode 6:项目导航器中没有 Frameworks 文件夹

    我正在使用 Xcode 6 并遵循 Xcode 版本 4 教程 因此这里和那里的情况有所不同 我的项目导航器中似乎没有 Frameworks 文件夹 因此当我下载一些 framework 文件并在项目编辑器的构建阶段手动添加它们时 我没有
  • HttpUtility.UrlEncoded URL 段的错误请求 400

    因此 如果我的应用程序 MVC url 中存在 url 编码段 则 IIS 会抛出 BAD REQUEST 400 e g http u lasoo com au Offer http u lasoo com au Offer 9289 7
  • json 从遗留属性名称反序列化

    如何设置 Newtonsoft Json 使用旧成员名称反序列化对象 但使用当前成员名称序列化它 编辑 要求是从正在序列化 反序列化的类中删除过时的成员 这是一个需要序列化和反序列化的示例对象 我给了一个属性一个属性 其中包含它过去可能已序
  • 将字典转换为方阵

    我想学习如何将字典转换为方阵 根据我所读到的内容 我可能需要将其转换为 numpy 数组 然后重新调整它的形状 我不想使用 reshape 因为我希望能够根据用户输入的信息来执行此操作 换句话说 我希望代码能够给出一个方阵 无论用户输入了多
  • 必须重新验证此请求的标头错误吗?

    我注意到 Chrome 缓存了一个视频文件 我用服务器上的另一个替换了它 chrome 继续从缓存中提供旧的 使用 JW flash 播放器 5 请求的标头如下所示 joe joe desktop wget O S spider http
  • 为什么这个 MySQL 查询的结果会相互相乘?

    SELECT user id SUM COALESCE point points 0 AS total points SUM CASE WHEN point date gt this month THEN point points ELSE
  • 在 Flutter 中以编程方式扩展 ExpansionTile

    我只是想用ExpansionTile在 Flutter 中 我将示例修改为如下所示 我想隐藏箭头并使用Switch扩大瓷砖 可以吗 或者我是否需要以编程方式呈现子项的自定义小部件 基本上 我只需要显示 隐藏孩子们 这是我的代码 import
  • 如何在 bash 脚本中重新组织 sed 正则表达式中的嵌套引号,从而触发“未终止的替代模式”错误?

    以下命令抛出一个unterminated substitute patternbash 中的错误 eval echo sed s a u a z n n 1 但并不适合所有人 Linux 显然运行良好 Mac 抛出未终止的替代模式错误 我该
  • 骨干获取回调的正确方法

    我的 Backbone 应用程序有一个名为schedule 我对成功和错误调用正确函数的区别有点困惑 我尝试了下面列出的两种可能的方法 但我不知道有什么区别以及从放置的路由器调用函数的正确方法是什么在外部视图中 第一种方式 require
  • 使用OpenGL和GLFW的简单三角形[重复]

    这个问题在这里已经有答案了 我编写了一个小程序来使用顶点缓冲区显示一个简单的三角形 对于我使用 glfw 的窗口 我的环境是 Mac 10 9 XCode 5 窗口看起来是黑色的 但三角形不是油漆 这里是代码 include