zoukankan      html  css  js  c++  java
  • 第一个程序,三角形

    #define GLEW_STATIC
    #include <GL/glew.h>
    #include <GLFW/glfw3.h>
    #include <iostream>
    
    using namespace std;
    
    void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
    {
    	// 当用户按下ESC键,我们设置window窗口的WindowShouldClose属性为true
    	// 关闭应用程序
    	if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
    		glfwSetWindowShouldClose(window, GL_TRUE);
    }
    
    const GLchar* vertexShaderSource = "#version 330 core
    "
    "layout (location = 0) in vec3 position;
    "
    "void main()
    "
    "{
    "
    "gl_Position = vec4(position.x, position.y, position.z, 1.0);
    "
    "}
    ";
    
    const GLchar* fragmentShaderSource = "#version 330 core
    "
    "out vec4 color;
    "
    "void main()
    "
    "{
    "
    "color = vec4(1.0f, 0.5f, 0.2f, 1.0f);
    "
    "}
    ";
    
    int main()
    {
    	glfwInit();
    	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    	glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    
    	GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);
    	if (window == nullptr)
    	{
    		std::cout << "Failed to create GLFW window" << std::endl;
    		glfwTerminate();
    		return -1;
    	}
    
    	glfwSetKeyCallback(window, key_callback);
    
    	glfwMakeContextCurrent(window);
    
    	glewExperimental = GL_TRUE;
    	if (glewInit() != GLEW_OK)
    	{
    		std::cout << "Failed to initialize GLEW" << std::endl;
    		return -1;
    	}
    
    	int width, height;
    	glfwGetFramebufferSize(window, &width, &height);
    	glViewport(0, 0, width, height);
    
    	GLuint vertexShader;
    	vertexShader = glCreateShader(GL_VERTEX_SHADER);
    	glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    	glCompileShader(vertexShader);
    	GLint success;
    	GLchar infoLog[512];
    	glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
    	if (!success)
    	{
    		glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
    		std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED
    " << infoLog << std::endl;
    	}
    
    	GLuint fragmentShader;
    	fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    	glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    	glCompileShader(fragmentShader);
    
    	GLuint shaderProgram;
    	shaderProgram = glCreateProgram();
    	glAttachShader(shaderProgram, vertexShader);
    	glAttachShader(shaderProgram, fragmentShader);
    	glLinkProgram(shaderProgram);
    
    	glDeleteShader(vertexShader);
    	glDeleteShader(fragmentShader);
    
    	GLfloat vertices[] = {
    		-0.5f, -0.5f, 0.0f,
    		0.5f, -0.5f, 0.0f,
    		0.0f,  0.5f, 0.0f
    	};
    	GLuint VBO, VAO;
    	glGenVertexArrays(1, &VAO);
    	glGenBuffers(1, &VBO);
    	glBindVertexArray(VAO);
    
    	glBindBuffer(GL_ARRAY_BUFFER, VBO);
    	glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    
    	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
    	glEnableVertexAttribArray(0);
    	
    	glBindBuffer(GL_ARRAY_BUFFER, 0);
    	glBindVertexArray(0);
    
    
    	while (!glfwWindowShouldClose(window))
    	{
    		glfwPollEvents();
    		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    		glClear(GL_COLOR_BUFFER_BIT);
    
    		glUseProgram(shaderProgram);
    		glBindVertexArray(VAO);
    		glDrawArrays(GL_TRIANGLES, 0, 3);
    		glBindVertexArray(0);
    
    		glfwSwapBuffers(window);
    	}
    
    	glDeleteVertexArrays(1, &VAO);
    	glDeleteBuffers(1, &VBO);
    
    	glfwTerminate();
    
    	return 0;
    }
    

      

  • 相关阅读:
    Django部署在CENTOS7上
    慕课DJANGO配置
    响应式布局组件介绍
    SYN泛洪攻击原理及防御
    Token,session,cookie
    -webkit-
    JS中dataTransfer对象在拖曳操作中的妙用。
    深入理解DOM节点类型第一篇——12种DOM节点类型概述
    js如何打印object对象
    cookie(2)
  • 原文地址:https://www.cnblogs.com/lakeone/p/9005145.html
Copyright © 2011-2022 走看看