GLFW是一个免费的开源多平台库,用于打开窗口,创建OpenGL上下文和管理输入。它很容易集成到现有的应用程序中,并没有声称主循环。 GLFW是用C语言编写的,并且对Windows,Mac OS X以及使用X Window系统的许多类Unix系统(例如Linux和FreeBSD)提供原生支持。 GLFW根据zlib / libpng许可证授权。
我尝试以 60 FPS 渲染,但我的场景渲染速度远高于 60 FPS。 这是我的渲染循环代码,这是以所需 FPS 渲染的正确方法还是有赌注......
如何让 Emscripten + WebGL 在终止或请求输入之前进行渲染
我正在尝试使用 Emscripten 获取一些我编写的旧 C++ 代码来编译为 WebAssembly 和 WebGL。我有一个非常简单的单文件 C++ 项目,可以呈现 Mandelbrot 集,使用 ...
GLFW (LWJGL) 输入 - 按住 CTRL 会阻止 CharCallback
我尝试为游戏中的一些文本字段实现一个简单的 CTRL + V。因此,每当按下或释放 ctrl 时,我都会在 KeyCallback 中为 CTRL 设置一个标志(我测试了这个)。当我尝试输入“V”时...
出于某种原因,每当我尝试运行我的代码时,我都会收到相同的错误,表明我尝试使用的函数是“未定义”。 我把 glfw3.h 文件放在 C:\WinGW\Include\GLFW\glfw...
我终于得到了一个使用纹理的四边形,为了清理我的代码,我决定将它移到一个单独的类中,但现在它消失了,没有任何错误消息。 主要文件: #包括 我终于得到了一个使用纹理的四边形,为了清理我的代码,我决定将它移到一个单独的类中,但现在它消失了,没有任何错误消息。 主文件: #include <glad/glad.h> #include <GLFW/glfw3.h> #include <stb/stb_image.h> #include <texture.h> #include <window.h> #include <shader.h> #include <model.h> #include <iostream> GLfloat vertexes[] { 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, -0.5, -0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, -0.5, 0.5, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, -0.5, -0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 }; const int width = 1900; const int height = 1200; int main() { glfwInit(); window window(width, height, "Voxel Engine"); gladLoadGL(); glViewport(0, 0, width, height); // shader shader_program shader("src/shaders/vertex_shader.shader", "src/shaders/fragment_shader.shader"); model model1(vertexes); /*// vao and vbo unsigned int vbo, vao; glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), vertexes, GL_STATIC_DRAW); glGenVertexArrays(1, &vao); glBindVertexArray(vao); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); glEnableVertexAttribArray(2); glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0);*/ texture test_img("resources/test_img.png", GL_TEXTURE0, GL_RGB, GL_UNSIGNED_BYTE); test_img.uniform_shader(shader, "tex_0", 0); while (!glfwWindowShouldClose(window.glfw_window)) { glfwPollEvents(); glClearColor(0.08, 0.12, 0.24, 1.0); glClear(GL_COLOR_BUFFER_BIT); shader.use(); //glBindTexture(GL_TEXTURE_2D, texture1); test_img.bind(); glBindVertexArray(model1.vao); glDrawArrays(GL_TRIANGLES, 0, 6); window.swap_buffers(); } glDeleteVertexArrays(1, &model1.vao); glDeleteBuffers(1, &model1.vbo); //glDeleteTextures(1, &texture1); test_img.destroy(); shader.destroy(); window.destroy(); glfwTerminate(); return 0; } 模型标题: #ifndef MODEL_CLASS_H #define MODEL_CLASS_H #include <glad/glad.h> class model { public: unsigned int vao, vbo; model(GLfloat vertexes[]); void render(); void destroy(); }; #endif 最后,模型 c++ 文件: #include <model.h> model::model(GLfloat vertexes[]) { // vao and vbo glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), vertexes, GL_STATIC_DRAW); glGenVertexArrays(1, &vao); glBindVertexArray(vao); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); glEnableVertexAttribArray(2); glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); } 我发现由于某种原因,vbo 和 vao 没有正确创建,但令我困惑的是我直接从 main.cpp 文件中复制了代码,但现在它不起作用。 错误就在这里 glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), vertexes, GL_STATIC_DRAW); 在你的新代码中vertexes是一个指针。 C++ 中不可能有数组参数,它总是转换为指针。因此 sizeof(vertexes) 返回指针的大小,而不是原始数组的大小。将尺寸作为单独的参数传递。 model::model(GLfloat* vertexes, size_t vertex_size) { ... glBufferData(GL_ARRAY_BUFFER, vertex_size, vertexes, GL_STATIC_DRAW); ... }
C++、GLFW 和 GLAD。一旦我把它移到一个单独的类中,四边形就消失了
我终于得到了一个使用纹理的四边形,为了清理我的代码,我决定将它移到一个单独的类中,但现在它消失了,没有任何错误消息。 主要文件: #包括 我终于得到了一个使用纹理的四边形,为了清理我的代码,我决定将它移到一个单独的类中,但现在它消失了,没有任何错误消息。 主文件: #include <glad/glad.h> #include <GLFW/glfw3.h> #include <stb/stb_image.h> #include <texture.h> #include <window.h> #include <shader.h> #include <model.h> #include <iostream> GLfloat vertexes[] { 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, -0.5, -0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, -0.5, 0.5, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, -0.5, -0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 }; const int width = 1900; const int height = 1200; int main() { glfwInit(); window window(width, height, "Voxel Engine"); gladLoadGL(); glViewport(0, 0, width, height); // shader shader_program shader("src/shaders/vertex_shader.shader", "src/shaders/fragment_shader.shader"); model model1(vertexes); /*// vao and vbo unsigned int vbo, vao; glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), vertexes, GL_STATIC_DRAW); glGenVertexArrays(1, &vao); glBindVertexArray(vao); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); glEnableVertexAttribArray(2); glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0);*/ texture test_img("resources/test_img.png", GL_TEXTURE0, GL_RGB, GL_UNSIGNED_BYTE); test_img.uniform_shader(shader, "tex_0", 0); while (!glfwWindowShouldClose(window.glfw_window)) { glfwPollEvents(); glClearColor(0.08, 0.12, 0.24, 1.0); glClear(GL_COLOR_BUFFER_BIT); shader.use(); //glBindTexture(GL_TEXTURE_2D, texture1); test_img.bind(); glBindVertexArray(model1.vao); glDrawArrays(GL_TRIANGLES, 0, 6); window.swap_buffers(); } glDeleteVertexArrays(1, &model1.vao); glDeleteBuffers(1, &model1.vbo); //glDeleteTextures(1, &texture1); test_img.destroy(); shader.destroy(); window.destroy(); glfwTerminate(); return 0; } 模型标题: #ifndef MODEL_CLASS_H #define MODEL_CLASS_H #include <glad/glad.h> class model { public: unsigned int vao, vbo; model(GLfloat vertexes[]); void render(); void destroy(); }; #endif 最后,模型 c++ 文件: #include <model.h> model::model(GLfloat vertexes[]) { // vao and vbo glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), vertexes, GL_STATIC_DRAW); glGenVertexArrays(1, &vao); glBindVertexArray(vao); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float))); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float))); glEnableVertexAttribArray(2); glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); } 我发现由于某种原因,vbo 和 vao 没有正确创建,但令我困惑的是我直接从 main.cpp 文件中复制了代码,但现在它不起作用。 错误就在这里 glBufferData(GL_ARRAY_BUFFER, sizeof(vertexes), vertexes, GL_STATIC_DRAW); 在新代码中,vertexes是一个指针,因此sizeof(vertexes)返回指针的大小,而不是原始数组的大小。将尺寸作为单独的参数传递。
当我学习 C 和 C++ 时,我开始使用 SDL2 来可视化我正在编写的程序。我使用 Visual Studio Code,因为我喜欢它的外观,而且我不想使用 IDE,我使用 com...
如何使用glfw设置glew:GLEW_ERROR_NO_GLX_DISPLAY有问题?
我曾尝试在一个小项目中使用glfw和glew,但我在使用glewInit()初始化glew时遇到了麻烦: 这是代码: 布尔 WindowGLFW::initialize() { // 初始化GLFW 如果(!glfw我...
这是我的makefile SRC_DIR = src BUILD_DIR = 构建/调试 CC = 铿锵++ SRC_FILES = $(通配符$(SRC_DIR)/*.cpp) OBJ_NAME = 游戏 INCLUDE_PATHS = -Iinclude LIBRARY_PATHS = -Llib -Llib //用户/baguma/
我正在按照 vulkan 教程在 macOS 上创建实例。我的观点略有不同,因为我使用的是 Clion,因此使用的是 CMake,而不是 XCode。当我尝试运行该程序时,我无法创建...
我尝试使用 makefile 构建我的项目,但它不起作用。我的 makefile 如下所示: gcc -g -I../include -L../lib ../src/*.c -o main -lglfw3dll 当我建造时 gcc -g -I../包括-L../l...
build] 链接:致命错误 LNK1104:无法打开文件“glfw.lib”[E:\Z_Dev\OpenGl uild\hello_window.vcxproj] 请有人帮我将其添加到我的项目中,我不知道如何添加它...
我想知道像素/片段的原始模板值,零还是一?如果可能的话可以得到什么具体的动作来修改模板值?
我对 OpenGL 中的模板缓冲区有很多困惑。我在这里阅读了 opengl 教程,https://learnopengl.com/Advanced-OpenGL/Stencil-testing。我只添加一行代码 glStencilFunc(GL_EQ...
我想知道如何将帧缓冲区绘制到两个不同的窗口。 我使用 glfw 创建窗口,并创建第二个窗口,如下所示: GLFWwindow* secondary_window = glfwCreateWindow(640, 480, "第二个
我有一个与 JNI 交互的工作代码。当我注入 DLL 时,一切正常。我决定改进我的程序并使用 ImGui 和 MinHook 添加 GUI。此后,DllMain 不再被c...
这可能吗? 我使用的是OpenGL版本 imgui 的一件事真的让我很恼火, 我似乎找不到为 imgui 创建最大化窗口的方法。 如果(!glfwInit()) ... GLFW...
有没有办法在类中使用glfwSetScrollCallback函数?
您好,我正在关注此页面的 opengl 教程并尝试实现相机类。 这是我的相机类代码。 相机类 { 民众: 静态浮动视场; glm::vec3 位置; 格鲁姆:...
我想将 Dear ImGui 元素渲染到两个不同的 glfw 窗口。 我这里有这个示例代码: #包括 int 主函数(无效) { GLFW窗口* 窗口1; GLFWwindow* 带...
我正在尝试用OpenGL和GLFW制作一个小游戏引擎。我尝试让输入发挥作用,他们做到了!但它非常笨重,因为您需要对窗口对象的引用,这意味着它不是