glfw 相关问题

GLFW是一个免费的开源多平台库,用于打开窗口,创建OpenGL上下文和管理输入。它很容易集成到现有的应用程序中,并没有声称主循环。 GLFW是用C语言编写的,并且对Windows,Mac OS X以及使用X Window系统的许多类Unix系统(例如Linux和FreeBSD)提供原生支持。 GLFW根据zlib / libpng许可证授权。

glfwGetWindowSize 和 glfwGetFramebufferSize 有什么区别?

我正在学习OpenGL并且正在使用GLFW库。我试图理解文档中屏幕坐标和窗口帧缓冲区的含义。因此,我记录了宽度和高度

回答 1 投票 0

无法在 Linux Mint 上找到 GLFW 包

我一直在尝试安装GLFW和GLFW3,使用终端来安装 sudo apt-get install GLFW 须藤 apt-get 安装 GLFW3 每当我这样做时,我都会得到如下结果 正在阅读包裹清单...完成

回答 4 投票 0

为什么我收到:“未定义对‘glfwInit’的引用”?

每当我尝试通过 MSYS2、Autotools 编译我的 OpenGL 示例项目,然后 make(使用静态编译的 GLEW 和 GLFW)时,我都会得到这种输出: x86_64-w64-mingw32-g++ -

回答 2 投票 0

glReadPixels() 返回背景颜色?

我试图通过 glReadPixels() 获取在 OpenGL 中单击的颜色: #包括 #包括 #包括 #包括 我正在尝试通过 glReadPixels() 获取在 OpenGL 中单击的颜色: #include <iostream> #include <glad/glad.h> #include <GLFW/glfw3.h> #include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/type_ptr.hpp> const char *vertexShaderSource = "#version 330 core\n" "layout (location = 0) in vec4 aPos;\n" "uniform mat4 projection;\n" "uniform mat4 model;\n" "void main()\n" "{\n" " gl_Position = projection * model * vec4(aPos.xy, 0.0, 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() { if (glfwInit()) { glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); } else { std::cout << "glfw failed to initialise" << std::endl; } GLFWwindow *window = glfwCreateWindow(500, 500, "Opengl Selection", NULL, NULL); glfwMakeContextCurrent(window); if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) { std::cout << "Failed to initialise glad" << std::endl; } glClearColor(0.3f, 0.2f, 0.1f, 1.0f); glViewport(0, 0, 500, 500); unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); glCompileShader(vertexShader); int 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; } unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); glCompileShader(fragmentShader); glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl; } unsigned int 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); float vertices[] = { // pos // tex 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f }; unsigned int VBO, VAO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindVertexArray(VAO); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void *) 0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); glUseProgram(shaderProgram); glm::mat4 projection = glm::ortho(0.0f, 1000.0f, 1000.0f, 0.0f, -1.0f, 1.0f); glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); while (!glfwWindowShouldClose(window)) { glfwPollEvents(); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(shaderProgram); // glm::mat4 projection = glm::ortho(0.0f, 500.0f, 500.0f, 0.0f, -1.0f, 1.0f); glm::mat4 model = glm::mat4(1.0f); model = glm::translate(model, glm::vec3(0.0f, 0.0f, 0.0f)); model = glm::scale(model, glm::vec3(100.0f, 100.0f, 0.0f)); glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "model"), 1, GL_FALSE, glm::value_ptr(model)); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 6); glBindVertexArray(0); glfwSetMouseButtonCallback(window, [](GLFWwindow *window, int button, int action, int mods) { if (action == GLFW_PRESS) { double xPos, yPos; glfwGetCursorPos(window, &xPos, &yPos); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); unsigned char data[4]; glReadPixels(xPos, yPos, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data); std::cout << (float) data[0] << " " << (float) data[1] << " " << (float) data[2] << " " << (float) data[ 3] << std::endl; } }); glfwSwapBuffers(window); glfwPollEvents(); } return 0; } 但是,无论我点击哪里,OpenGl 都会返回背景颜色。我相信我在如何在屏幕上渲染正方形方面做错了。 问题*是传递给 glfwGetCursorPos 的位置是相对于窗口的 upper-左上角,而传递给 glReadPixels 的位置是相对于窗口的 lower-左角窗户。 解决方案是将调用的 y 位置反转为 glReadPixels。 500x500 窗口中位置的值范围为 0 到 499,因此必须从 499 中减去 yPos: glReadPixels(xPos, 499 - yPos, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data); 现在,当 xPos 和 yPos < 50. 都返回正方形的颜色 *正如Rabbid76在评论中首先指出的那样。

回答 1 投票 0

带有 GLFW 和 Qt 的 OpenGL 游戏引擎?

几个月前我开始了类似的问题Qt和OpenGL用于游戏开发 目前我不太确定我应该做什么。我经常读到不建议使用 Qt 玩游戏,

回答 2 投票 0

需要帮助为 opengl 安装 glfw [已关闭]

我已经尝试过了 #包括 #包括 #包括 似乎没有任何作用。 看看它不工作 做过这个 和这个 和这个 我试过了

回答 1 投票 0

迫切需要帮助为 opengl 安装 glfw

我是 C++ 的初学者,我是自学的。我到处寻找有关如何执行此操作的说明,但在完成所有操作后,它仍然不起作用。 我是 c++ 的初学者,我排序...

回答 1 投票 0

与设置为相同尺寸的窗口相比,OpenGL 视口的尺寸不正确

我有一个 600x400 的窗口,OpenGL 渲染的视口看起来要小得多(如下图所示)。 我期待的视口和我得到的视口的图片,请注意大部分

回答 1 投票 0

为 CLion 导入 glfw

我无法找到一种方法来为 CLion 导入 glfw 库。我尝试了一些事情,但它们没有按预期工作。我将不胜感激任何帮助。 cmake_minimum_required(版本3.29) 项目(TestProj)...

回答 1 投票 0

如何使用 Camera 类从 OpenGL 中的鼠标坐标获取世界坐标?

我正在尝试将鼠标坐标转换为OpenGL中的世界坐标,并且我正在使用learnOpenGL.com上的相机类,就是这个。我正在使用这个函数来转换光标空间...

回答 1 投票 0

glfwPollEvents() 内发生访问冲突?

当我开始我的程序时: #包括 #包括 #包括 #包括 #包括 #包括 结构

回答 1 投票 0

GLFW/GLEW:读取访问冲突时出错(glfwPollEvents 功能)

我目前正在学习有关 OpenGL 的教程,但遇到了问题。 在真正详细告诉您之前,我想告诉您,我知道代码写得不好,但它只是......

回答 1 投票 0

GLEW 与 WinAPI,窗口大小和点击坐标问题

当我使用不同的窗口 API 时,会出现一些差异。当我使用 WinAPI 创建窗口时,它比 GLFW 创建的窗口大 1.5 倍。两者的文档都说宽度和他...

回答 1 投票 0

多个模型不是一起渲染而是单独渲染

我正在构建一个简单的测试,看看是否可以使用多个 EBO、VAO 和 VBO 渲染多个单独的对象。过去我只用四边形就可以做到这一点,但现在我使用的是幼崽......

回答 1 投票 0

GLFW 和 C 崩溃了

我在将 glfw 窗口创建拆分为两个函数(CreateWindow、CreateGameLoop)时遇到问题。我尝试了两种方法,但其中一种会导致窗口崩溃。 第一个例子有...

回答 1 投票 0

LWJGL glfwPollEvents 会阻止 macOS 上的 libGDX 主循环

虽然我的基于 Lwjgl3 应用程序的游戏在 Windows 和各种 Linux 发行版上运行良好,但我在 macOS 上只会出现黑屏。看起来对 glfwPollEvents 的调用根本没有返回,这会阻止

回答 1 投票 0

libdecor-gtk-警告:无法初始化 GTK。使用glfwinit时出现

我为 bgfx 设置了一个测试项目,我正在尝试学习它。 问题是,我无法让 GLFW 正确初始化。 目前存在的代码片段是这样的: #包括 #

回答 1 投票 0

我在 vs code 中的 opengl 设置不起作用

所以我想尝试一些 OpenGL,并尝试使用 GLFW、CMake 和 MSYS2 为其设置 VS Code。 我可以使用 CMake 构建我的项目并使用 MyProject.exe 启动它,但是当我尝试运行或调试时...

回答 1 投票 0

有人可以解释一下如何在新的 CLion 项目中添加 GLFW 吗?

我学习Cpp有一段时间了,我想导入libaires之类的。但到目前为止我还无法导入和使用任何东西...我下载了 GLFW 的二进制文件,复制了 i...

回答 1 投票 0

添加帧缓冲区后,Frag Y 坐标从 -600 变为 0?

添加帧缓冲区并绘制后,默认帧缓冲区片段坐标y在底部变为-600,顶部为0,而不是底部为0,顶部为600。 我搞砸了

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.