Skip to main content
2 of 4
added 89 characters in body

OpenGL vertex normalization issue on MAC OS;

I am trying to learn OpenGL and this is my attempt to create a hello triangle program but no matter what the vertices are not normalized I when I have the set to 1,0,0 or something the vertex is not at the very edge of not even close in face.

here is my code

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>


//Vertex shader source code
const char* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
"   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
//Fragment Shader source code
const char* fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
"   FragColor = vec4(0.4f, 0.4f, 0.8f, 1.0f);\n"
"}\n\0";

int main()
{
    //init glfw
    glfwInit();


    //specifing window hints
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    //defining vertices of the triangle we want to draw
    GLfloat vertices[] = 
    {
      1.0f , 0.0f , .0f,  
      .0f , -1.0f , .0f, 
      0.0f , 0.0f , .0f  
    };

    //creating the window
    GLFWwindow *window = glfwCreateWindow(800, 800, "Triangle Code", NULL, NULL);
    if (window == 0)
    {
        std::cout << "Could not create a window :(" << std::endl;
        glfwTerminate();
        return -1;
    }

    //adding the window to the current context
    glfwMakeContextCurrent(window);

    //telling glad to load OpenGL for us
    gladLoadGL();

    //setting the viewport
    glViewport(0,0,800,800);

    ///setting the clear color
    glClearColor(.07f, .13f, .17f, 1.0f);

    //clear and assign the new color to the window
    glClear(GL_COLOR_BUFFER_BIT);

    //swap back and front buffers
    glfwSwapBuffers(window);

    //creating a vertex shader object
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    //Attach vertex shader to source code
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    //Complie the vertex shader
    glCompileShader(vertexShader);

    //creating the fragment shader
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    //Attaching the fragment shader to source code
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    //compiling source code
    glCompileShader(fragmentShader);

    //Creating a shader program and getting its refrence
    GLuint shaderProgram = glCreateProgram();
    //attaching the vertex shader to the shader program
    glAttachShader(shaderProgram,vertexShader);
    //attaching the fragment shader to the shader program
    glAttachShader(shaderProgram,fragmentShader);
    
    //Linking the shaders to shader program
    glLinkProgram(shaderProgram);

    //deleting the vertex shader as its use has been done
    glDeleteShader(vertexShader);
    //deleting the fragment shader as its use has been done
    glDeleteShader(fragmentShader);

    //Creating vertex buffer and vertex array objects
    GLuint VAO,VBO;//buffer object

    //Generating vertex arrays with only one object
    glGenVertexArrays(1, &VAO);
    //Generating fragment arrays with only one object
    glGenBuffers(1, &VBO);

    //Making the VAO the current vertex array object for OpenGL
    glBindVertexArray(VAO);
    //Binding the vertex buffer specinfing it is an GL ARRAY BUFFER
    glBindBuffer(GL_ARRAY_BUFFER, VBO);

    //Introduce the verticies to the VBO
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    //configure the vertex attribute so that OpenGl knows how to read the VBO
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    //Enable the vertex array so that OpenGL uses it
    glEnableVertexAttribArray(0);

    //Bind both the VBO & VAO to 0 to prevent us from accidently modifint as we only have one object
    glBindBuffer(GL_ARRAY_BUFFER,0);
    glBindVertexArray(0);

    //Main game loop
    while (!glfwWindowShouldClose(window))
    {
        //Clear color
        glClearColor(.07f, .13f, .17f, 1.0f);
        //Clear the color
        glClear(GL_COLOR_BUFFER_BIT);
        //tell OpenGL which shader program to use
        glUseProgram(shaderProgram);
        //Bint the VAO so OpenGL uses it
        glBindVertexArray(VAO);
        //The the array
        glDrawArrays(GL_TRIANGLES,0,3);
        //Swap front and back buffers
        glfwSwapBuffers(window);
        //poll the events
        glfwPollEvents();
    }

    //Delete VAO and VBO
    glDeleteVertexArrays(1, &VAO);
    glDeleteBuffers(1, &VBO);
    //Delete shader program
    glDeleteProgram(shaderProgram);
    //Destroy window and terminate GLFW
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}

the tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: clang++ build active file",
            "command": "/usr/bin/clang++",
            "args": [
                "-std=c++17",
                "-Wall",
                "-g",
                "-I${workspaceFolder}/dependencies/include",
                "-L${workspaceFolder}/dependencies/library",
                "-fansi-escape-codes",
                "${workspaceFolder}/${relativeFile}",//This is for our open gl code
                "${workspaceFolder}/*.c",//This is for glad
                "${workspaceFolder}/dependencies/library/libglfw.3.4.dylib",
                "-o",
                "${workspaceFolder}/app",
                "-framework",
                "OpenGL",
                "-framework",
                "Cocoa",
                "-framework",
                "IOKit",
                "-framework",
                "CoreVideo",
                "-framework",
                "CoreFoundation",
                "-Wno-deprecated"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compiler: /usr/bin/clang++"
        },
    ]
}

I am new to OpenGL and this is my first time making a program in OpenGL so I may have made a very silly mistake please let me know

enter image description here