画一个三角形
来源:互联网 发布:男女说唱的网络歌曲 编辑:程序博客网 时间:2024/04/29 18:49
先上三角形的代码:
#include <iostream>// GLEW#define GLEW_STATIC#include <GL/glew.h>// GLFW#include <GLFW/glfw3.h>// 回调函数的声明void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);// 窗体的宽和高const GLuint WIDTH = 800, HEIGHT = 600;// 下面是顶点着色器和片段着色器,用GLSL语言编写const GLchar* vertexShaderSource = "#version 330 core\n" "layout (location = 0) in vec3 position;\n" "void main()\n" "{\n" "gl_Position = vec4(position.x, position.y, position.z, 1.0);\n" "}\0";const GLchar* fragmentShaderSource = "#version 330 core\n" "out vec4 color;\n" "void main()\n" "{\n" "color = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" "}\n\0";// main函数是窗口的入口函数int main(){ // 初始化GLFW glfwInit(); // glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//OPENGL主版本号 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//次版本号 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//采用CORE编译模式 glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);//窗口大小不可更改 // 创建窗口 GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr); glfwMakeContextCurrent(window);//把创建出来的窗口设置为当前环境的上下文 // 设置窗口的回调函数 glfwSetKeyCallback(window, key_callback); // 设置GLEW,此项设置为真 glewExperimental = GL_TRUE; // glewInit(); // 定义窗口的尺寸大小 int width, height; glfwGetFramebufferSize(window, &width, &height); glViewport(0, 0, width, height);//得到窗口的尺寸大小之后绘制窗口 // // 首先,创建一个顶点着色器,在把之前写的顶点着色器源码导入顶点着色器中,然后编译顶点着色器 GLuint 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\n" << infoLog << std::endl; } // 同上 GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); // Check for compile time errors glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl; } // 然后创建一个总的着色器程序,把之前的各个着色器全部附加上来 GLuint shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram);//链接着色器 //检查链接状态 glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl; } glDeleteShader(vertexShader); glDeleteShader(fragmentShader);//然后就可以把之前的着色器删除了 // 下面是自己定义的三角形的顶点数据 GLfloat vertices[] = { -0.5f, -0.5f, 0.0f, // Left 0.5f, -0.5f, 0.0f, // Right 0.0f, 0.5f, 0.0f // Top }; GLuint VBO, VAO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO);//分别创建VAO对象和VBO对象 // Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointer(s). 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); // Note that this is allowed, the call to glVertexAttribPointer registered VBO as the currently bound vertex buffer object so afterwards we can safely unbind glBindVertexArray(0); // Unbind VAO (it's always a good thing to unbind any buffer/array to prevent strange bugs) // Game loop while (!glfwWindowShouldClose(window)) { // Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions glfwPollEvents(); // Render // Clear the colorbuffer glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // Draw our first triangle glUseProgram(shaderProgram); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(0); // Swap the screen buffers glfwSwapBuffers(window); } // Properly de-allocate all resources once they've outlived their purpose glDeleteVertexArrays(1, &VAO); glDeleteBuffers(1, &VBO); // Terminate GLFW, clearing any resources allocated by GLFW. glfwTerminate(); return 0;}// Is called whenever a key is pressed/released via GLFWvoid key_callback(GLFWwindow* window, int key, int scancode, int action, int mode){ if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GL_TRUE);}
0 0
- 画一个三角形
- 画一个三角形
- css画一个三角形
- OpenGL_3:画一个三角形
- 1、画一个三角形
- Direct3D11代码画一个三角形
- OPENGL 自学笔记:画一个三角形
- XNA 4.0画一个彩色三角形
- 使用three.js画一个三角形
- 用JavaScript面向对象画一个三角形
- 设计一个三角形类
- 初始化一个三角形
- 输出一个三角形图案
- java打印一个三角形
- 创建一个三角形类
- CSS画出一个三角形
- [OpenGL]创建一个三角形
- 输出一个倒三角形
- apache HttpClient学习系列---1
- strlen和sizeof的区别
- Cookie的安全性问题的解决方案
- ios 下拉刷新
- 【Spring mvc】Spring MVC源码分析——初始化过程
- 画一个三角形
- 手机上传图片
- activeMq的发布订阅模式
- 人工差错处理的过程
- NYOJ 1058部分和问题(DFS)
- 习题33 while循环
- 注解实现Bean依赖注入
- ADB命令行的常用指令
- c++ map set综合运用