使用OpenGL和GLFW的简单三角形[重复]
Posted
技术标签:
【中文标题】使用OpenGL和GLFW的简单三角形[重复]【英文标题】:Simple triangle using OpenGL and GLFW [duplicate] 【发布时间】:2014-07-17 08:02:09 【问题描述】:我编写了一个小程序来使用顶点缓冲区显示一个简单的三角形。对于我使用 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;
【问题讨论】:
【参考方案1】:您正在为渲染选择 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
和glBindVertexArray
。
【讨论】:
嗨 Reto,非常感谢。它有效。以上是关于使用OpenGL和GLFW的简单三角形[重复]的主要内容,如果未能解决你的问题,请参考以下文章