glfw 相关问题

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

“glbinding”示例中的编译错误,该示例应该输出 OpenGL 版本

我想了解 OpenGL 加载器库 glbinding 是如何工作的,但我无法编译我的非常基本的示例,这是他们的 cubescape 示例的简化版本: #包括 #

回答 1 投票 0

OpenGL 中的非渐变颜色变化

我正在尝试逐渐将三角形的颜色更改为光谱上的每种颜色。颜色基本上在渲染循环的每次迭代中逐渐变化,并将颜色信息传递给

回答 1 投票 0

尝试构建 GLEW 项目时出现项目链接错误,尽管库(glew32.a)似乎没问题

我在使用 Cmake 链接我的 OpenGL 项目时遇到问题。 为了使用 OpenGL 扩展,我下载了预构建的 GLEW 库二进制文件。 但在构建我的项目后,我收到了一个警告: 跳过 incompa...

回答 1 投票 0

有没有一种方法可以在不编译的情况下使用GLFW?

我正在编写一个仅 C++ 标头的库,该库应该使用 GLFW,但在官方网站上没有提到无需先编译即可使用它。 我考虑过包括...

回答 1 投票 0

Mujoco:xkbcommon:错误:字符串文字不是有效的UTF-8字符串[关闭]

以前没有发生过,但是当我运行任何 mujoco 脚本时突然发生。我收到以下错误: 创建窗口 glfw xkbcommon:错误:/usr/share/X11/locale/iso8859-1/Compose:39:34:字符串文字我...

回答 1 投票 0

帧缓冲区纹理未传递到着色器且未显示在屏幕上

我正在编写一个程序,可以通过着色器合成两个图像并将结果保存在本地。简单地输出到视口会切断屏幕像素,我想使其无窗口,所以我

回答 1 投票 0

如何限制 GLFW 窗口中的每秒帧数? (使用亲爱的 ImGui)

目前,如果我的窗口足够小,我的 Dear ImGui 应用程序(主要是带有一些自定义 OpenGL 渲染的演示窗口)的运行速度约为 2000 fps。我怎样才能将其限制为显示器刷新率(或

回答 3 投票 0

如何使用回调更新 GLFWWindow 中的 Mujoco 可视化?

我想使用 mujoco 与 GLFW 进行可视化。 在 mujoco 上我找到了可视化示例。 在此示例中,您构建了一个 mujoco 模型并在 glfw 中显示它。要在

回答 0 投票 0

GLSL着色器是否有可读取信息的最大限制?

我在 C++ 20 中使用带有 GLFW 和 GLAD 的 OpenGL 4.5,我正在尝试制作一个着色器,使用 Blinn-Phong 算法计算不同功能(点、方向、点)的多个光源,但是.. .

回答 1 投票 0

无法编译Cmake项目外部库(使用GLWF(OpenGL))

我正在尝试编译一个项目来开始学习OpenGl,但是我不能。 当我运行 CMake -G "Unix Makefiles" .. 它会在没有任何警告的情况下生成 MakeFile。 运行 Make 时,它无法

回答 0 投票 0

C++ GLSL 着色器:“错误:不支持 GLSL 3.30。支持的版本有:1.10、1.20、1.30、1.00 ES 和 3.00 ES”或黑窗

我在我的简单 OpenGL 项目中添加了非常简单的 GLSL 着色器,但它无法正常工作。 #包括 #包括 #包括 #包括 我在简单的 OpenGL 项目中添加了非常简单的 GLSL 着色器,但它无法正常工作。 #include <python3.6m/Python.h> #include <iostream> #include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include <vector> #include <fstream> #include <sstream> using namespace glm; GLuint LoadShaders(const char * vertex_file_path, const char * fragment_file_path){ // Создаем шейдеры GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER); GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER); // Загружаем код Вершинного Шейдера из файла std::string VertexShaderCode; std::ifstream VertexShaderStream(vertex_file_path, std::ios::in); if (VertexShaderStream.is_open()) { std::stringstream sstr; sstr << VertexShaderStream.rdbuf(); VertexShaderCode = sstr.str(); VertexShaderStream.close(); } // Загружаем код Фрагментного шейдера из файла std::string FragmentShaderCode; std::ifstream FragmentShaderStream(fragment_file_path, std::ios::in); if (FragmentShaderStream.is_open()){ std::stringstream sstr; sstr << FragmentShaderStream.rdbuf(); FragmentShaderCode = sstr.str(); FragmentShaderStream.close(); } GLint Result = GL_FALSE; int InfoLogLength; // Компилируем Вершинный шейдер printf("Компиляция шейдера: %s\n", vertex_file_path); char const * VertexSourcePointer = VertexShaderCode.c_str(); glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL); glCompileShader(VertexShaderID); // Выполняем проверку Вершинного шейдера glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); if ( InfoLogLength > 0 ){ std::vector<char> VertexShaderErrorMessage(InfoLogLength+1); glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]); fprintf(stdout, "%s\n", &VertexShaderErrorMessage[0]); } // Компилируем Фрагментный шейдер printf("Компиляция шейдера: %s\n", fragment_file_path); char const * FragmentSourcePointer = FragmentShaderCode.c_str(); glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer , NULL); glCompileShader(FragmentShaderID); // Проверяем Фрагментный шейдер glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); if ( InfoLogLength > 0 ){ std::vector<char> FragmentShaderErrorMessage(InfoLogLength+1); glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]); fprintf(stdout, "%s\n", &FragmentShaderErrorMessage[0]); } // Создаем шейдерную программу и привязываем шейдеры к ней fprintf(stdout, "Создаем шейдерную программу и привязываем шейдеры к ней\n"); GLuint ProgramID = glCreateProgram(); glAttachShader(ProgramID, VertexShaderID); glAttachShader(ProgramID, FragmentShaderID); glLinkProgram(ProgramID); // Проверяем шейдерную программу glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result); glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength); if (InfoLogLength > 0) { std::vector<char> ProgramErrorMessage(InfoLogLength+1); glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]); fprintf(stdout, "%s\n", &ProgramErrorMessage[0]); } glDeleteShader(VertexShaderID); glDeleteShader(FragmentShaderID); return ProgramID; } int main(int argc, char *argv[]) { // Инициализируем GLFW if (!glfwInit()) { fprintf( stderr, "Ошибка при инициализации GLFW\n" ); return -1; } glfwDefaultWindowHints(); glfwWindowHint(GLFW_SAMPLES, 4); // Включаем сглаживание glEnable(GL_MULTISAMPLE); // glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // Мы хотим использовать OpenGL 3.3 // glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed // glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // Мы не хотим старый OpenGL // Открыть окно и создать в нем контекст OpenGL GLFWwindow* window; // (В сопроводительном исходном коде эта переменная является глобальной) window = glfwCreateWindow(1024, 768, "Tutorial 01", NULL, NULL); if (window == NULL) { fprintf( stderr, "Невозможно открыть окно GLFW. Если у вас Intel GPU, то он не поддерживает версию 3.3. Попробуйте версию уроков для OpenGL 2.1.\n" ); glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // Инициализируем GLEW glewExperimental=true; // Флаг необходим в Core-режиме OpenGL if (glewInit() != GLEW_OK) { fprintf(stderr, "Невозможно инициализировать GLEW\n"); return -1; } GLuint VertexArrayID; glGenVertexArrays(1, &VertexArrayID); glBindVertexArray(VertexArrayID); // Массив 3 векторов, которые являются вершинами треугольника static const GLfloat g_vertex_buffer_data[] = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.5f, 1.0f, 0.0f, }; // Это будет идентификатором нашего буфера вершин GLuint vertexbuffer; // Создадим 1 буфер и поместим в переменную vertexbuffer его идентификатор glGenBuffers(1, &vertexbuffer); // Сделаем только что созданный буфер текущим glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); // Передадим информацию о вершинах в OpenGL glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW); // Включим режим отслеживания нажатия клавиш, для проверки ниже glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE); // Создать и откомпилировать нашу шейдерную программу GLuint programID = LoadShaders( "SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader" ); do { // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Устанавливаем наш шейдер текущим // glUseProgram(programID); // Рисуем треугольник... // Указываем, что первым буфером атрибутов будут вершины glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); glVertexAttribPointer( 0, // Атрибут 0. Подробнее об этом будет рассказано в части, посвященной шейдерам. 3, // Размер GL_FLOAT, // Тип GL_FALSE, // Указывает, что значения не нормализованы 0, // Шаг (void*) nullptr // Смещение массива в буфере ); // Вывести треугольник! glDrawArrays(GL_TRIANGLES, 0, 3); // Начиная с вершины 0, всего 3 вершины -> один треугольник glDisableVertexAttribArray(0); // Сбрасываем буферы glfwSwapBuffers(window); glfwPollEvents(); } // Проверяем нажатие клавиши Escape или закрытие окна while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && glfwWindowShouldClose(window) == 0); } 我看到黑色的窗口(如果我写 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 否则我看到错误: 编译着色器:SimpleVertexShader.vertexshader 0:1(10):错误:不支持 GLSL 3.30。支持的版本有:1.10、1.20、1.30、1.00 ES 和 3.00 ES *编译着色器:SimpleFragmentShader.fragmentshader * 创建着色器程序并链接... 错误:链接未编译/未专门化的着色器 ) 顶点着色器: #version 300 es layout(location = 0) in vec3 vertexPosition_modelspace; void main(){ gl_Position.xyz = vertexPosition_modelspace; gl_Position.w = 1.0; } 片段着色器: #version 300 es precision mediump float; layout(location = 0) out vec3 color; void main() { color = vec3(1,0,0); } 这里注意: GLuint programID = ... 您实际上可能成功地创建并链接了您的程序对象,但您从未激活它!您必须在抽签之前的某处添加glUseProgram(programID)。

回答 1 投票 0

按住一个键,然后按下一个改变相同变量的键继续修改它,就好像它在第一个键的位置

我正在制作第一人称相机,基于学习更多关于四元数的教程。这个相机有一个更严重的错误,如果按住“空格”并且您按住“左控制和曲...

回答 0 投票 0

创建 GLFW 窗口失败

代码: #include "include/glad/glad.h" #include "include/GLFW/glfw3.h" #包括 主函数() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);

回答 1 投票 0

Java 中的 2D 渲染

我正在用 Kotlin 制作游戏。为此,我必须绘制一张地图,坚持使用几百张图像,这些图像并没有真正改变,但每一帧都会移动到屏幕上,这非常滞后。你有...

回答 0 投票 0

C++ GLFW OpenGL 项目,无法创建 GLFW 窗口

我正在开发一个 C++ OpenGL 项目,使用 GLFW 创建窗口。启动 PC 并首次尝试运行后,我收到此错误“无法创建 GLFW 窗口:WGL:驱动程序

回答 0 投票 0

打印!导致 OpenGL 程序无法运行?

我目前正在用 Rust 开发一个简单的程序来在屏幕上绘制一个彩色三角形。我按照 OpenGL 的说明进行操作。我的程序运行良好,三角形按预期呈现...

回答 0 投票 0

没有显示正确的窗口

我正在尝试使用图形库 OpenGl 创建一个项目。现在我想做的就是创建一个显示红色的窗口,标题为“测试窗口”。 当我运行代码时

回答 0 投票 0

GLFW + CMake + CLion

我尝试使用 CLion 的 CMake 编译 GLFW 站点的示例代码(我之前根本没有使用过)。编译时出现此错误 cmd.exe /C "cd . && C:\MinGW in\g++.exe -g

回答 0 投票 0

OpenGL 生成三角形而不是预期的 2D 矩形 [关闭]

我的代码应该使用 OpenGL 生成一个 2D 矩形。出于某种原因,虽然我的代码对我来说似乎是正确的(我是一个正在上大学课程的初学者),但它一直在生成一个三角形......

回答 1 投票 0

glfwCreateWindow 中断 gdb 会话,发出 SIGSTOP 信号

我在 Ubuntu 操作系统上使用 gdb 调试器来调试我的应用程序。 在调试会话期间,我无法通过 glfwCreateWindow 函数。 当我执行步骤时,我的调试会话被 SIGSTOP 信号中断...

回答 0 投票 0

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