日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机图形学(三)——画一个矩形

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机图形学(三)——画一个矩形 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

畫一個矩形

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); };

總結

以上是生活随笔為你收集整理的计算机图形学(三)——画一个矩形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。