中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

wordpress 搜索模版寧波seo優(yōu)化公司排名

wordpress 搜索模版,寧波seo優(yōu)化公司排名,主機怎么做網(wǎng)站服務(wù)器,網(wǎng)站建設(shè)-部署與發(fā)布文章目錄 1、簡介1.1 OpenGL簡介1.2 glfw簡介 2、安裝glfw2.1 直接命令二進制安裝2.2 源碼安裝 3、測試glfw3.1 測試1,glfwglew3.2 測試2,glfwglad3.3 測試3 結(jié)語 1、簡介 1.1 OpenGL簡介 OpenGL作為圖形界的工業(yè)標(biāo)準(zhǔn),其僅僅定義了一組2D和…

文章目錄

  • 1、簡介
    • 1.1 OpenGL簡介
    • 1.2 glfw簡介
  • 2、安裝glfw
    • 2.1 直接命令二進制安裝
    • 2.2 源碼安裝
  • 3、測試glfw
    • 3.1 測試1,glfw+glew
    • 3.2 測試2,glfw+glad
    • 3.3 測試3
  • 結(jié)語

1、簡介

1.1 OpenGL簡介

OpenGL作為圖形界的工業(yè)標(biāo)準(zhǔn),其僅僅定義了一組2D和3D圖形接口API,而對于窗口管理、IO消息響應(yīng)等并沒有規(guī)定。也就是說,OpenGL依賴各平臺提供用于渲染的context以及具體實現(xiàn)方式,而各平臺提供的實現(xiàn)不盡相同。這些實現(xiàn)主要有:Windows平臺下的WGL、Linux下的Mesa/GLX、Mac OS X下的Cocoa/NSGL,以及跨平臺的GLUT、GLFW、SDL等等。

安裝OpenGL庫:

sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev

使用如下的命令來查看對應(yīng)顯卡的OpenGL版本:

glxinfo | grep -i opengl

在這里插入圖片描述

1.2 glfw簡介

GLFW 是一個開源的多平臺庫,適用于 OpenGL、OpenGL ES 和 桌面上的 Vulkan 開發(fā)。它提供了一個簡單的 API 來創(chuàng)建 窗口、上下文和表面,接收輸入和事件。
GLFW 是用 C 語言編寫的,支持 Windows、macOS、Wayland 和 X11。
GLFW 根據(jù) zlib/libpng 許可證獲得許可。

https://www.glfw.org/
在這里插入圖片描述
查看glfw安裝情況如下:

locate glfw

在這里插入圖片描述

2、安裝glfw

2.1 直接命令二進制安裝

使用包管理器安裝。

  • 安裝glfw:
sudo apt-get update
sudo apt-get -y install libglfw3# 或者
sudo apt-get install libglfw3
sudo apt-get install libglfw3-dev# 或者
sudo apt update
sudo apt -y install libglfw3

在這里插入圖片描述

  • 卸載glfw
# 要僅卸載包libglfw3
sudo apt-get remove libglfw3# 卸載 libglfw3 及其依賴項
sudo apt-get -y autoremove libglfw3# 刪除 libglfw3 配置和數(shù)據(jù)
sudo apt-get -y purge libglfw3

在這里插入圖片描述

2.2 源碼安裝

官方地址:
https://github.com/glfw/glfw

從 GLFW 的官方網(wǎng)站下載源代碼并編譯安裝,依次執(zhí)行如下命令:

# git clone git@github.com:glfw/glfw.git
# wget https://github.com/glfw/glfw/archive/refs/tags/3.4.tar.gz
wget http://github.com/glfw/glfw/releases/download/3.4/glfw-3.4.zip
cd glfw-3.4
mkdir build && cd build
sudo apt-get install libxrandr-dev
sudo apt-get install libxinerama-dev
sudo apt-get install libxcursor-dev
sudo apt-get install libxi-dev
cmake .. -DGLFW_BUILD_WAYLAND:BOOL=OFF
make -j4
sudo make install

通過wget下載glfw源碼。
在這里插入圖片描述
通過cmake編譯glfw代碼。
在這里插入圖片描述
通過make install安裝glfw庫文件。
在這里插入圖片描述

3、測試glfw

3.1 測試1,glfw+glew

要在 Linux 系統(tǒng)上配置 OpenGL 開發(fā)環(huán)境并使用 GLFW 和 GLEW,你可以按照以下步驟操作。
使用 GLEW 加載所有 OpenGL 函數(shù)指針。通過cmake構(gòu)建測試工程。

  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8.1)project(my_project)find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(glfw3 REQUIRED)add_executable(main main.cpp)
target_link_libraries(main OpenGL::GL  GLEW::GLEW glfw)
  • main.cpp
#include <GL/glew.h>
#include <GLFW/glfw3.h>int main(void)
{GLFWwindow* window;/* Initialize the library */if (!glfwInit())return -1;/* Create a windowed mode window and its OpenGL context */window = glfwCreateWindow(640, 480, "Hello World, yxy", NULL, NULL);if (!window){glfwTerminate();return -1;}/* Make the window's context current */glfwMakeContextCurrent(window);if(glewInit() != GLEW_OK){std::cerr << "Failed to initalize GLEW" << std::endl;return -1;}/* Loop until the user closes the window */while (!glfwWindowShouldClose(window)){/* Render here */glClear(GL_COLOR_BUFFER_BIT);glClearColor(0, 1, 0, 1);/* Swap front and back buffers */glfwSwapBuffers(window);/* Poll for and process events */glfwPollEvents();}glfwTerminate();return 0;
}

編譯如下:
在這里插入圖片描述

3.2 測試2,glfw+glad

GLAD 是一個用于加載 OpenGL 函數(shù)指針的庫,它簡化了 OpenGL 函數(shù)的調(diào)用。你可以從 GLAD 的官方網(wǎng)站下載并生成適合你需求的 GLAD 配置。通常,你需要指定 OpenGL 的版本和配置文件類型(通常是核心模式)。生成后,將包含的頭文件和源文件添加到你的項目中。

在你的項目中,你需要包含 GLAD 和 GLFW 的頭文件,并鏈接到相應(yīng)的庫。如果你使用 CMake,你可能需要在你的 CMakeLists.txt 文件中添加相應(yīng)的鏈接指令。

  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8.1)project(my_project)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)find_package(glfw3 REQUIRED)file(GLOB SOURCE_FILES glad.c main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})target_link_libraries(${PROJECT_NAME} glfw)
  • main.cpp
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);int main() {// Intialize GLFWglfwInit();// Configure GLFW (v3.3)glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// Create a window objectGLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL, yxy", NULL, NULL);if (window == NULL) {std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}// Make our window the main context on the current threadglfwMakeContextCurrent(window);// Initialize GLADif (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {std::cout << "Failed to initialize GLAD" << std::endl;return -1;}// Set size of the rendering window (dimensions)glViewport(0, 0, 800, 600);// Register a callback function on the window that gets called// each time the window is resizedglfwSetFramebufferSizeCallback(window, framebuffer_size_callback);// Render loop that keeps on running until we tell GLFW to stopwhile(!glfwWindowShouldClose(window)) {// Check input close window if it is the escape keyprocessInput(window);// Rendering commands here// Set a color to clear the screen with (state-setting function)glClearColor(0.2f, 0.3f, 0.3f, 1.0f);// Clear the screen with the color (state-using function)glClear(GL_COLOR_BUFFER_BIT);// Swap the color buffer and show output to the screenglfwSwapBuffers(window);// Check if any events are triggeredglfwPollEvents();}// Clean/delete all GLFW's resourcesglfwTerminate();return 0;
}void framebuffer_size_callback(GLFWwindow* window, int width, int height) {// Update width and heightglViewport(0, 0, width, height);
}void processInput(GLFWwindow *window) {// Check whether the user has pressed the escape key and close GLFWif (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);
}

編譯如下:
在這里插入圖片描述

3.3 測試3

  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8.1)project(my_project)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)find_package(glfw3 REQUIRED)file(GLOB SOURCE_FILES glad.c main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})target_link_libraries(${PROJECT_NAME} glfw)
  • main.cpp
#include <glad/glad.h>
#include <GLFW/glfw3.h>#include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;// 頂點著色器,GLSL語言
const char *vertexShaderSource = "#version 330 core\n""layout (location = 0) in vec3 aPos;\n""void main()\n""{\n""   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n""}\0";
// 片元著色器
const char *fragmentShaderSource = "#version 330 core\n""out vec4 FragColor;\n""void main()\n""{\n""   FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n""}\n\0";int main()
{// glfw: initialize and configureglfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif// glfw window creationGLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL, yxy", NULL, NULL);if (window == NULL){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);// glad: load all OpenGL function pointersif (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLAD" << std::endl;return -1;}// build and compile our shader program// ------------------------------------// vertex shaderint vertexShader = glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);glCompileShader(vertexShader);// check for shader compile errorsint success;char 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;}// fragment shaderint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);glCompileShader(fragmentShader);// check for shader compile errorsglGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);if (!success){glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;}// link shadersint shaderProgram = glCreateProgram();glAttachShader(shaderProgram, vertexShader);glAttachShader(shaderProgram, fragmentShader);glLinkProgram(shaderProgram);// check for linking errorsglGetProgramiv(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);float vertices[] = {-0.5f, -0.5f, 0.0f, // left0.5f, -0.5f, 0.0f, // right0.0f,  0.5f, 0.0f  // top};unsigned int VBO, VAO;//創(chuàng)建VAO對象glGenVertexArrays(1, &VAO);glBindVertexArray(VAO);//創(chuàng)建VBO對象,把頂點數(shù)組復(fù)制到一個頂點緩沖中,供OpenGL使用glGenBuffers(1, &VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO); // 緩沖綁定到GL_ARRAY_BUFFERglBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // 頂點數(shù)據(jù)復(fù)制到緩沖的內(nèi)存中//解釋頂點數(shù)據(jù)方式glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); // 頂點數(shù)據(jù)的解釋glEnableVertexAttribArray(0);// 解綁VAOglBindVertexArray(0);// 解綁VBOglBindBuffer(GL_ARRAY_BUFFER, 0);// render loop// -----------while (!glfwWindowShouldClose(window)){// input// -----processInput(window);// render// ------glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// draw our first triangleglUseProgram(shaderProgram);glBindVertexArray(VAO);glDrawArrays(GL_TRIANGLES, 0, 3);glfwSwapBuffers(window);glfwPollEvents();}// optional: de-allocate all resourcesglDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteProgram(shaderProgram);glfwTerminate();return 0;
}//鍵盤按鍵回調(diào)函數(shù)
void processInput(GLFWwindow *window)
{if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);
}//調(diào)整窗口大小回調(diào)函數(shù)
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{glViewport(0, 0, width, height);
}

在這里插入圖片描述

結(jié)語

如果您覺得該方法或代碼有一點點用處,可以給作者點個贊,或打賞杯咖啡;╮( ̄▽ ̄)╭
如果您感覺方法或代碼不咋地//(ㄒoㄒ)//,就在評論處留言,作者繼續(xù)改進;o_O???
如果您需要相關(guān)功能的代碼定制化開發(fā),可以留言私信作者;(????)
感謝各位大佬童鞋們的支持!( ′ ▽′ )ノ ( ′ ▽′)っ!!!

http://www.risenshineclean.com/news/9738.html

相關(guān)文章:

  • wordpress 查看草稿鶴壁seo推廣
  • 網(wǎng)絡(luò)裝修公司長春做網(wǎng)絡(luò)優(yōu)化的公司
  • 網(wǎng)站可以做彈窗廣告么亞馬遜提升關(guān)鍵詞排名的方法
  • 東莞網(wǎng)站推廣電話百度seo網(wǎng)絡(luò)營銷書
  • 全包圓裝修公司seo百度關(guān)鍵字優(yōu)化
  • 工作站百度高級搜索引擎
  • 哈爾濱網(wǎng)站開發(fā)建設(shè)公司關(guān)鍵詞歌曲
  • 奉節(jié)做網(wǎng)站軟文營銷的技巧
  • 廈門網(wǎng)站排名福建seo關(guān)鍵詞優(yōu)化外包
  • 做動態(tài)網(wǎng)站的app合肥網(wǎng)站排名推廣
  • 做視頻在哪個網(wǎng)站找素材網(wǎng)站搭建模板
  • 建設(shè)部建設(shè)廳報考網(wǎng)站信息發(fā)布網(wǎng)站有哪些
  • 網(wǎng)站優(yōu)化標(biāo)準(zhǔn)網(wǎng)絡(luò)營銷怎么做?
  • 成都網(wǎng)站建設(shè)免費咨詢福州seo視頻
  • 描述政府網(wǎng)站網(wǎng)站建設(shè)簡單制作html靜態(tài)網(wǎng)頁
  • 米粒網(wǎng)站建設(shè)商業(yè)網(wǎng)站
  • 森動網(wǎng)網(wǎng)站建設(shè)好嗎網(wǎng)站的營銷推廣方案
  • 做網(wǎng)站 建站推銷一個產(chǎn)品的方案
  • 一級a做爰片免費網(wǎng)站志鴻優(yōu)化設(shè)計答案網(wǎng)
  • 鄂州網(wǎng)站開發(fā)微信朋友圈推廣
  • 網(wǎng)站功能板塊廣州做網(wǎng)站的公司哪家好
  • 廣州做蛋糕的網(wǎng)站推廣策略可以分為哪三種
  • 臺山網(wǎng)站建設(shè)口碑營銷的例子
  • 九脈堂是做網(wǎng)站的優(yōu)化大師win10
  • 東莞做營銷型網(wǎng)站的關(guān)鍵詞首頁排名代發(fā)
  • 對網(wǎng)站建設(shè)的認識百度手機
  • 手機網(wǎng)站開發(fā)公司關(guān)鍵詞簡譜
  • 東莞大朗網(wǎng)站建設(shè)湖南網(wǎng)站推廣公司
  • 如何建設(shè)網(wǎng)站 企業(yè)做一個私人網(wǎng)站需要多少錢
  • 美女做曖曖免費視頻網(wǎng)站公司網(wǎng)站建設(shè)價格