tutorial iluminacion for example español ejemplos beginners c++ xcode opengl glfw

c++ - iluminacion - Triángulo simple usando OpenGL y GLFW



opengl tutorial 5 (1)

Está eligiendo OpenGL Core Profile para su representación:

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

A su código le faltan varias cosas para cumplir con el Perfil Core:

  • Necesita implementar programas de sombreado. El Core Profile ya no es compatible con la antigua tubería fija y requiere que implemente sus propios sombreadores en GLSL. Explicar cómo hacerlo en detalle está más allá del alcance de una respuesta, pero utilizará llamadas como glCreateProgram , glCreateShader , glShaderSource , glCompileShader , glAttachShader , glLinkProgram . Debería poder encontrar material en línea y en libros.
  • Necesita usar Vertex Array Objects (VAO). Busque glGenVertexArrays y glBindVertexArray .

Esta pregunta ya tiene una respuesta aquí:

Escribí un pequeño programa para mostrar un triángulo simple usando el buffer de vértice. Para las ventanas que estoy usando glfw, mi entorno es Mac 10.9, XCode 5.

La ventana aparece negra pero el triángulo no es pintura.

Aquí el código:

#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; }