Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: It's rendering nothing

Hybrid View

  1. #1
    Junior Member Newbie
    Join Date
    May 2013
    Posts
    12

    It's rendering nothing

    I'm trying to create my own lib that can simplify code, so I'm trying to write the tutorials that we can found on web using my lib but I'm have some trouble and I don't know why it's rendereing nothing.
    so this is my main file
    Code :
    #include "../../lib/OpenGLControl.h"
    #include "../../lib/Object.h"
    #include <iostream>
    using namespace std;
    using namespace sgl;
     
    int main(){
    	OpenGLControl sglControl;
    	sglControl.initOpenGL("02 - My First Triangle",1024,768,3,3);
    	GLuint VertexArrayID;
    	glGenVertexArrays(1, &VertexArrayID);
    	glBindVertexArray(VertexArrayID);
    	//trconfigurações do triangulo
    	vector<glm::vec3> vertices;
     
    	vertices.push_back(glm::vec3(-1.0f,-1.0f,0.0f));
    	vertices.push_back(glm::vec3(1.0f,-1.0f,0.0f));
    	vertices.push_back(glm::vec3(0.0f,1.0f,0.0f));
    	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
     
    	Object triangle(vertices);
     
    	do{
    		glClear(GL_COLOR_BUFFER_BIT); 
    		triangle.render(GL_TRIANGLES);
    	    	glfwSwapBuffers();
     
    	}
    	while( glfwGetKey( GLFW_KEY_ESC ) != GLFW_PRESS &&
    	glfwGetWindowParam( GLFW_OPENED ) );
    	glDeleteVertexArrays(1, &VertexArrayID);
    	glfwTerminate();
    	return 0;
     
    }

    and this is my Object class functions.

    Code :
    #include "../lib/Object.h"
     
    sgl::Object::Object(){
    	this->hasColor = false;
     
    }
     
    sgl::Object::Object(std::vector<glm::vec3> vertices){
    	for(int i = 0; i < vertices.size(); i++)
    		this->vertices.push_back(vertices[i]);
     
    	glGenBuffers(1, &vertexBuffer);
    	glBindBuffer(GL_ARRAY_BUFFER, this->vertexBuffer);
    	glBufferData(GL_ARRAY_BUFFER, this->vertices.size()*sizeof(glm::vec3),&vertices[0], GL_STATIC_DRAW);
    }
     
    sgl::Object::~Object(){
    		glDisableVertexAttribArray(0);
    		glDisableVertexAttribArray(1);
    		glDeleteBuffers(1,&(this->vertexBuffer));
    		glDeleteBuffers(1,&(this->colorBuffer));
    }
     
     
     
    void sgl::Object::render(GLenum mode){
    	// 1rst attribute buffer : vertices
    	glEnableVertexAttribArray(0);
    	glBindBuffer(GL_ARRAY_BUFFER, this->vertexBuffer);
    	glVertexAttribPointer(
    		0, // The attribute we want to configure
    		3,                  // size
    		GL_FLOAT,           // type
    		GL_FALSE,           // normalized?
    		0,                  // stride
    		(void*)0            // array buffer offset
    	);
     
    	cout<<vertices.size()<<endl;
    	glDrawArrays(mode, 0, vertices.size());
    	glDisableVertexAttribArray(0);
     
     
    }
     
    void sgl::Object::setColor(std::vector<glm::vec3> color){
    	for(int i = 0; i < color.size(); i++)
    		this->color.push_back(color[i]);
    	glGenBuffers(1, &(this->colorBuffer));
    	glBindBuffer(GL_ARRAY_BUFFER, this->colorBuffer);
    	glBufferData(GL_ARRAY_BUFFER, color.size()*sizeof(glm::vec3),&color[0], GL_STATIC_DRAW);
    	this->hasColor = true;
    }
     
    void sgl::Object::setVertices(std::vector<glm::vec3> vertices){
    	for(int i = 0; i < vertices.size(); i++)
    		this->vertices.push_back(vertices[i]);
    	glGenBuffers(1, &vertexBuffer);
    	glBindBuffer(GL_ARRAY_BUFFER, this->vertexBuffer);
    	glBufferData(GL_ARRAY_BUFFER, vertices.size()*sizeof(glm::vec3),&vertices[0], GL_STATIC_DRAW);
    }

    the tutorial that I rewtriting is it:

    Code :
    /*
     
    	Copyright 2010 Etay Meiri
     
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.
     
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
     
        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <http://www.gnu.org/licenses/>.
     
        Tutorial 03 - First triangle
    */
     
    #include <stdio.h>
    #include <GL/glew.h>
    #include <GL/freeglut.h>
    #include "math_3d.h"
     
    GLuint VBO;
     
    static void RenderSceneCB()
    {
        glClear(GL_COLOR_BUFFER_BIT);
     
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
     
        glDrawArrays(GL_TRIANGLES, 0, 3);
     
        glDisableVertexAttribArray(0);
     
        glutSwapBuffers();
    }
     
     
    static void InitializeGlutCallbacks()
    {
        glutDisplayFunc(RenderSceneCB);
    }
     
    static void CreateVertexBuffer()
    {
        Vector3f Vertices[3];
        Vertices[0] = Vector3f(-1.0f, -1.0f, 0.0f);
        Vertices[1] = Vector3f(1.0f, -1.0f, 0.0f);
        Vertices[2] = Vector3f(0.0f, 1.0f, 0.0f);
     
     	glGenBuffers(1, &VBO);
    	glBindBuffer(GL_ARRAY_BUFFER, VBO);
    	glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
    }
     
     
    int main(int argc, char** argv)
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
        glutInitWindowSize(1024, 768);
        glutInitWindowPosition(100, 100);
        glutCreateWindow("Tutorial 03");
     
        InitializeGlutCallbacks();
     
        // Must be done after glut is initialized!
        GLenum res = glewInit();
        if (res != GLEW_OK) {
          fprintf(stderr, "Error: '%s'\n", glewGetErrorString(res));
          return 1;
        }
     
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
     
        CreateVertexBuffer();
     
        glutMainLoop();
     
        return 0;
    }

    if some one can find the error please help me!
    Last edited by kaberdock; 06-28-2013 at 10:25 AM.

  2. #2
    Junior Member Newbie
    Join Date
    May 2013
    Posts
    12
    I found the error, is that I using as data of vertexbuffer a copy of the vector that I pass as parameter, so the right code will be it:

    Code :
    sgl::Object::Object(std::vector<glm::vec3> vertices){
    	for(int i = 0; i < vertices.size(); i++)
    		this->vertices.push_back(vertices[i]);
     
    	glGenBuffers(1, &vertexBuffer);
    	glBindBuffer(GL_ARRAY_BUFFER, this->vertexBuffer);
    	glBufferData(GL_ARRAY_BUFFER, this->vertices.size()*sizeof(glm::vec3),&(this->vertices[0]), GL_STATIC_DRAW);
    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •