计算机图形学(三)——画一个矩形
生活随笔
收集整理的這篇文章主要介紹了
计算机图形学(三)——画一个矩形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
畫一個矩形
main.cpp
#include <iostream>// GLEW #define GLEW_STATIC #include <GL/glew.h>// GLFW #include <GLFW/glfw3.h>#include "Shader.h"#include"SOIL2/SOIL2.h" #include"SOIL2/stb_image.h" const GLint WIDTH = 800, HEIGHT = 600;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_OPENGL_FORWARD_COMPAT, GL_TRUE);//for macglfwWindowHint(GLFW_RESIZABLE, GL_FALSE);GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Learn OpenGL B18080312", nullptr, nullptr);// retina displayint screenWidth, screenHeight;glfwGetFramebufferSize(window, &screenWidth, &screenHeight);if (window == nullptr) {std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);glewExperimental = GL_TRUE;if (glewInit() != GLEW_OK) {std::cout << "Failed to initialize GLEW" << std::endl;glfwTerminate();return -1;}Shader shader = Shader("res/shaders/code.vs", "res/shaders/code.fs");GLfloat vertices[] ={ //position //uv coords紋理坐標:左下(0,0),右上(1,1)0.5f, 0.5f, 0.0f, 1.0f,1.0f,// top right0.5f, -0.5f, 0.0f, 1.0f,0.0f, // bottom right-0.5f, -0.5f, 0.0f, 0.0f,0.0f, // bottom left-0.5f, 0.5f, 0.0f , 0.0f,1.0f// top left};unsigned int indices[] ={0, 1, 3, // first triangle1, 2, 3 // second triangle};GLuint VAO, VBO;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, 5 * sizeof(GLfloat), (GLvoid*)0);glEnableVertexAttribArray(0);glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(3*sizeof(GLfloat)));glEnableVertexAttribArray(1);GLuint EBO;glGenBuffers(1, &EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);glBindBuffer(GL_ARRAY_BUFFER, 0);glBindVertexArray(0);//Texture//load imageint width, height;unsigned char* image =SOIL_load_image("res/pictures/image1.jpg", &width, &height, 0, SOIL_LOAD_RGBA);//讀出圖片的長和寬,0沒有意義//設置紋理GLuint texture;glGenTextures(1, &texture);//創建glBindTexture(GL_TEXTURE_2D, texture);//綁定glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//WRAP_S是U坐標glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);//WRAP_T是V坐標glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_REPEAT);//FILTER放大縮小,如何與紋理坐標相適應glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_REPEAT);while (!glfwWindowShouldClose(window)) {glViewport(0, 0, screenWidth, screenHeight);glfwPollEvents();glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);shader.Use();glBindVertexArray(VAO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);glBindVertexArray(0);glfwSwapBuffers(window);}glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteBuffers(1, &EBO);glfwTerminate();return 0; }code.vs
#version 330 core layout(location = 0) in vec3 position; layout(location = 1) in vec3 color; out vec3 ourColor; void main(){gl_Position = vec4(position.x, position.y, position.z, 1.0f);ourColor = color; };code.fs
#version 330 core in vec3 ourColor; out vec4 color; void main(){color = vec4(ourColor, 0.7f); };總結
以上是生活随笔為你收集整理的计算机图形学(三)——画一个矩形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: appcan与java_AppCan试用
- 下一篇: 排序算法:希尔排序