OpenGL: Dreieck wird nicht gezeichnet.



  • // Include standard headers
    #include <stdio.h>
    #include <stdlib.h>
    
    // Include GLEW
    #include <GL/glew.h>
    
    // Include GLFW
    #include <GL/glfw.h>
    
    // Include GLM
    #include <glm/glm.hpp>
    using namespace glm;
    
    #include "shader.hpp"
    
    #include <fstream>
    using namespace std;
    std::ofstream clog;
    
    int main( void )
    {
    	clog.open("OpenGLLog.txt", std::ios_base::out);
    
    	// Initialise GLFW
    	if( !glfwInit() )
    	{
    		clog << "Failed to initialize GLFW\n" << endl;
    		return -1;
    	}
    
    	glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);
    	glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 4);
    	glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    	glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    
    	// Open a window and create its OpenGL context
    	if( !glfwOpenWindow( 1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW ) )
    	{
    		clog <<  "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n" << endl;
    		glfwTerminate();
    		return -1;
    	}
    
    	// Initialize GLEW
    	if (glewInit() != GLEW_OK) {
    		fprintf(stderr, "Failed to initialize GLEW\n");
    		return -1;
    	}
    
    	glfwSetWindowTitle( "Tutorial 01" );
    
    	// Ensure we can capture the escape key being pressed below
    	glfwEnable( GLFW_STICKY_KEYS );
    
    	// Dark blue background
    	glClearColor(0.0f, 0.0f, 0.3f, 0.0f);
    
    	// Create and compile our GLSL program from the shaders
    	//GLuint programID = LoadShaders( "SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader" );
    
    	static const GLfloat g_vertex_buffer_data[] = { 
    		-1.0f, -1.0f, 0.0f,
    		 1.0f, -1.0f, 0.0f,
    		 0.0f,  1.0f, 0.0f,
    	};
    
    	GLuint vertexbuffer;
    	glGenBuffers(1, &vertexbuffer);
    	glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    	glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
    
    	do{
    		// Clear the screen
    		glClear( GL_COLOR_BUFFER_BIT );
    
    		// Use our shader
    		//glUseProgram(programID);
    
    		// 1rst attribute buffer : vertices
    		glEnableVertexAttribArray(0);
    		glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    		glVertexAttribPointer(
    			0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
    			3,                  // size
    			GL_FLOAT,           // type
    			GL_FALSE,           // normalized?
    			0,                  // stride
    			(void*)0            // array buffer offset
    		);
    
    		// Draw the triangle !
    		glDrawArrays(GL_TRIANGLES, 0, 3); // From index 0 to 3 -> 1 triangle
    
    		glDisableVertexAttribArray(0);
    
    		// Swap buffers
    		glfwSwapBuffers();
    
    	} // Check if the ESC key was pressed or the window was closed
    	while( glfwGetKey( GLFW_KEY_ESC ) != GLFW_PRESS &&
    		   glfwGetWindowParam( GLFW_OPENED ) );
    
    	// Close OpenGL window and terminate GLFW
    	glfwTerminate();
    
    	// Cleanup VBO
    	glDeleteBuffers(1, &vertexbuffer);
    
    	return 0;
    }
    

    Zeichnet nur den blauen Hintergrund, nicht das Dreieck. Woran kann das liegen?



  • evtl. ist die Kamera so ausgerichtet, sodass Du das Dreieck nicht siehst. Wird die projektionsmatrix irgendwo gesetzt bzw. nutzt du einen Shader?



  • @Kamera: nein
    @Shader: ja



  • Hast du einen Depth Buffer? Wenn ja solltest du ihn auch clearen oder Depth Buffering ausschalten (glDisable(GL_DEPTH_TEST)).



  • dot schrieb:

    Hast du einen Depth Buffer? Wenn ja solltest du ihn auch clearen oder Depth Buffering ausschalten (glDisable(GL_DEPTH_TEST)).

    Hilft auch nicht 😞



  • Oder kann mir jemand einen Link zu einem funktionierenden OpenGL 3 oder 4 Beispiel-Programm geben?



  • schhhhhhhklaaand schrieb:

    Oder kann mir jemand einen Link zu einem funktionierenden OpenGL 3 oder 4 Beispiel-Programm geben?

    http://www.spieleprogrammierung.net/p/content.html


Anmelden zum Antworten