GLFW是一个免费的开源多平台库,用于打开窗口,创建OpenGL上下文和管理输入。它很容易集成到现有的应用程序中,并没有声称主循环。 GLFW是用C语言编写的,并且对Windows,Mac OS X以及使用X Window系统的许多类Unix系统(例如Linux和FreeBSD)提供原生支持。 GLFW根据zlib / libpng许可证授权。
glad/glad.h:27:2:错误:#error OpenGL标头已包含,删除此包含,很高兴已经提供了它
我使用的是 Ubuntu 20.04 LTS 系统,我无法运行我的 CPP 代码。每次我尝试编译这个: #包括 #包括 #include“高兴/高兴.h” 在...
我正在用 C++ 编写一个使用 OGL / GLFW 的游戏。 我的游戏始终以 60 fps 运行,没有任何屏幕撕裂。经过一些研究,似乎 glfwSwapInterval() 函数应该是......
我有提示: glfwWindowHint(GLFW_DEPTH_BITS, GL_TRUE); 然后后来我有: glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); 当我画画时 glClear(GL_COLOR_BUFFER_BIT |
我是 OpenGL 和 GLFW 的新手,我想使用 GLFW Python 绑定和 Moderngl 库在 Python 中制作一个小型图形引擎来获取 OpenGL 上下文。来自 GLFW 的文档...
我遇到一个问题,以下代码行总是打印“无法初始化高兴”,然后退出程序: if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { ...
使用learnopengl.com开发一个小型引擎,但过了一段时间,我仍然无法找出处理输入的最佳方法。 当然,我可以按照指南并使用它们的功能: 无效 key_call...
我在使用 GLFW 和 GLEW 理解一些 opengl 内容时遇到问题。 我有 3 个文件,如下所示: 主要.cpp: #include“gamewindow.h” int main() { 游戏窗口 *游戏窗口 = 新游戏窗口(1024, 768, "
我在 eclipse cdt(c++) 中使用 gcc/mingw 安装了 glew、glfw 和 glm,全部都是静态的。 一切正常,但我不喜欢 eclipse 输出控制台中的警告: 警告:损坏的 .drectve 位于...
为什么 GLFW 窗口仅在抽象为唯一指针时才会抛出访问冲突?
我正在尝试在静态库中使用 GLFW。如果我在库的主要函数(应用程序)内初始化 GLFW 窗口,它就会起作用。但如果我将它抽象为一个单独的类,我就可以获得访问权限
我想用 GLFW 在 Linux 上用 C++ 制作 3D 游戏,很高兴。但正确的 3D 视角无法正常工作,我无法找出原因。 这应该画一个橙色三角形,它会变小......
我正在创建一个 3D 金字塔并为其加载砖墙纹理。 我最初让金字塔工作,但是当我尝试添加纹理时,它无法加载,并且留下一个黑色窗口: #
我正在窗口中制作 GL 渲染器。程序本身工作正常,但是当我“线程”渲染循环时(正如我对网络类所做的那样,所以我猜测它应该工作),程序打开并
我正在使用 C++ 和 OpenGL。但我需要将对象缩放到一定比例。对于游戏引擎来说。 我的目标只是设置而不是更改比例。 #定义GLFW_INCLUDE_NONE #包括 我正在使用 C++ 和 OpenGL。但我需要将对象缩放到一定比例。对于游戏引擎来说。 我的目标只是设置比例而不是更改。 #define GLFW_INCLUDE_NONE #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <GLFW/glfw3.h> #include <Glad/glad.h> #include "vendor/ImGui/imgui.h" #include "vendor/ImGui/backends/imgui_impl_glfw.h" #include "vendor/ImGui/backends/imgui_impl_opengl3.h" #include <stdio.h> #define WINDOW_WIDTH 640 #define WINDOW_HEIGHT 480 void error_callback(int error, const char* description) { fprintf(stderr, "Error: %s\n", description); } const char* vertexShaderSource = "#version 330 core\n" "layout(location = 0) in vec3 aPos;\n" "uniform mat4 projection;\n" "void main()\n" "{\n" " gl_Position = projection * vec4(aPos.x, aPos.y, aPos.z, 1.0);\n" "}\0"; const char* fragmentShaderSource = "#version 330 core\n" "out vec4 FragColor;\n" "uniform vec2 wsize;\n" "void main()\n" "{\n" " vec2 position = gl_FragCoord.xy;\n" " FragColor = vec4(position.x/wsize.x, position.x/position.y/wsize.x,position.y/wsize.y, 1.0f);\n" "}\n\0"; float aspectRatio; glm::mat4 projection; void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); aspectRatio = (float)width / (float)height; projection = glm::ortho(-aspectRatio, aspectRatio, -1.0f, 1.0f, -1.0f, 1.0f); } int main() { if (!glfwInit()) { // Initialization failed } glfwSetErrorCallback(error_callback); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow* window = glfwCreateWindow(640, 480, "GL YA!", NULL, NULL); if (!window) { // Window or context creation failed } glfwMakeContextCurrent(window); gladLoadGL(); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); float vertices[9 * 2] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, }; glfwSwapInterval(1); GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); glCompileShader(vertexShader); GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); GLuint shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); glDeleteShader(vertexShader); glDeleteShader(fragmentShader); GLuint VBO; glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); GLuint VAO; glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); (void)io; io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; io.ConfigDockingWithShift = false; ImGui::StyleColorsDark(); const char* glsl_version = "#version 100"; ImGui_ImplGlfw_InitForOpenGL(window, true); ImGui_ImplOpenGL3_Init(glsl_version); float x = 0; float y = 0; float z = 0; while (!glfwWindowShouldClose(window)) { int width, height; glfwGetFramebufferSize(window, &width, &height); framebuffer_size_callback(window, width, height); ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); ImGui::DockSpaceOverViewport(ImGui::GetMainViewport(), ImGuiDockNodeFlags_PassthruCentralNode); ImGui::Begin("Hello OpenGL!"); ImGui::InputFloat("X", &x); ImGui::InputFloat("Y", &y); ImGui::InputFloat("Z", &z); ImGui::End(); ImGui::Render(); glViewport(0, 0, width, height); glClear(GL_COLOR_BUFFER_BIT); //Square glUseProgram(shaderProgram); GLint wsize = glGetUniformLocation(shaderProgram, "wsize"); glUniform2f(wsize, width, height); /* glm::mat4 transform = glm::mat4(1.0f); // Start with an identity matrix transform = glm::translate(transform, glm::vec3(x, y, z)); // Move the triangle along the x and y axes for (int i = 0; i < 9 * 2; i += 3) { glm::vec4 vertex = transform * glm::vec4(vertices[i], vertices[i + 1], vertices[i + 2], 1.0f); vertices[i] = vertex.x; vertices[i + 1] = vertex.y; vertices[i + 2] = vertex.z; } */ float currentX = 0.0f; float currentY = 0.0f; float currentZ = 0.0f; for (int i = 0; i < 9 * 2; i += 3) { currentX += vertices[i]; currentY += vertices[i + 1]; currentZ += vertices[i + 2]; } currentX /= 9; currentY /= 9; currentZ /= 9; float tx = x - currentX; float ty = y - currentY; float tz = z - currentZ; for (int i = 0; i < 9 * 2; i += 3) { vertices[i] += tx; vertices[i + 1] += ty; vertices[i + 2] += tz; } for (int i = 0; i < 9 * 2; i += 3) { vertices[i] += x; vertices[i + 1] += y; vertices[i + 2] += z; } glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 6); //ImGui ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); glfwSwapBuffers(window); glfwPollEvents(); } glfwDestroyWindow(window); glfwTerminate(); } 我不知道该怎么办。我想要一个精确的变量来设置,而不是改变大小。 我正在寻找使用 glm 的解决方案,稍后我会将所有内容放入类中。 如果您有网格的顶点数据并且想要缩放对象而不迭代网格数据,那么解决方案是让着色器为您完成此操作。 为此,我们只需要在顶点着色器中引入一个uniform变量即可。 在应用变换之前,我们首先必须缩放顶点位置,例如 //vertex shader in vec3 aPos; //position coords uniform vec3 uScale; //scale factor uniform mat4 uProjection; //mvp matrix int main() { gl_Position = uProjection * vec4(aPos * uScale, 1.0); }
尝试使用 gcc 编译我的 opengl 项目时出现链接器错误
我使用 glfw 和 glew 来创建窗口,它给了我链接器错误。我该如何解决它。这是我第一次安装 glfw 和 glew,所以我可能错过了安装步骤。任何...
ImGui 与令人高兴的 openGL 加载器抛出分段错误(核心转储)
我是 ImGui 库的新手,最近我一直在尝试其中包含的示例。一切都像魅力一样工作,直到我将 gl3w 的包含(和功能)更改为 happy(我想要的加载器......
我正在按照本教程学习 OpenGL,但由于编译器找不到头文件之一,因此我在编译时遇到了问题。 这是我正在尝试编译的文件: #包括 我正在按照 本教程 学习 OpenGL,但由于编译器找不到头文件之一,所以我在编译时遇到问题。 这是我正在尝试编译的文件: #include <glad/glad.h> #include <GLFW/glfw3.h> int main() { return 0; } 为了编译,我正在使用 $ gcc -o sandbox sandbox.cpp -lGL -lGLU -lglut 我收到以下错误: sandbox.cpp:1:23: fatal error: glad/glad.h: No such file or directory #include <glad/glad.h> ^ compilation terminated. 我遵循了 此 wiki 的前两部分 安装 OpenGL 和库。 我认为问题要么是错误的编译命令,要么是我的 OpenGL 安装中存在缺陷。 GLAD 是 OpenGL 的函数加载器。本教程解释了如何设置。 教程解释了 GLAD 的目的: 由于OpenGL驱动有很多不同的版本,其大部分函数的位置在编译时是未知的,需要在运行时查询。 GLAD 的设置涉及使用 Web 服务器生成特定于您的 GL 版本、扩展和语言的源文件和头文件。然后将源文件和头文件放置在项目的 src 和 include 目录中。 如果您正在查看这个简单的GLFW示例,您可以删除glad/gl.h包含,以及 gladLoadGL(glfwGetProcAddress); 再往下走。 如果您使用的是 Linux,例如 ubuntu, 你不需要很高兴,只需添加这两个标题即可: #include <GLES2/gl2.h> #include <EGL/egl.h> 如果示例保存为glfw_ex2.c,您可以在命令行中编译它,如下所示: g++ glfw_ex2.c -lglfw -lGLESv2 当然,对于本示例,linmath.h 必须存在于同一目录中。 如果缺少什么,可以这样安装并再次尝试编译: sudo apt install libglfw3-dev libgles2-mesa-dev libegl1-mesa-dev sudo apt install build-essential 然后像这样运行它: ./a.out 我建议你在VSCode中按F5运行并调试程序,如果你将目录中名为“mingw32-make.exe”的文件更改为“make.exe”,你可以尝试执行命令“make run”存在文件“makefile”
是什么让 pthread 成为“主线程”? 我这样问是因为某些 GLFW 函数只能从主线程调用。我了解线程安全的概念。但有什么特别的...
我正在尝试编译一个简短的 openGl 和 GLFW 代码,但我失败了.. 我已经包含了所有 .h ,如下所示: #包括 #包括 #包括 #包括...
尝试构建 GLEW 项目时出现 MinGW 链接器错误,尽管库(glew32.a)似乎没问题
我在使用 Cmake 链接我的 OpenGL 项目时遇到问题。 为了使用 OpenGL 扩展,我下载了预构建的 GLEW 库二进制文件。 但在构建我的项目后,我收到了很多警告: 跳过