OpenGL(开放图形库)是一种独立于平台的图形标准和API,可用于桌面,工作站和移动设备。它旨在提供硬件加速渲染,因此与传统软件渲染相比,性能大大提高。 OpenGL用于CAD软件和计算机游戏等应用程序。 OpenGL标准以及OpenGL ES由Khronos集团控制。
我目前需要一个在Python中每秒运行128次的函数。这是我的代码 导入时间、线程 运行计数器 = 0 def 跑步者(): 全局运行计数器 而真实: 做一些事...
我一直在尝试安装GLFW和GLFW3,使用终端来安装 sudo apt-get install GLFW 须藤 apt-get 安装 GLFW3 每当我这样做时,我都会得到如下结果 正在阅读包裹清单...完成
我在Ubuntu 11.04上编写了一个使用freeglut的程序。效果很好。然后我又买了一台电脑,尝试在全新安装的 Ubuntu 11.04 上运行该程序。不起作用。所以我安装了 须藤...
我试图通过 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在评论中首先指出的那样。
我正在尝试渲染一个具有木质纹理的立方体(立方体的所有面都具有相同的纹理),但纹理没有按应有的方式渲染(看起来纹理在某些部分是透明的......
我遇到了一个问题,我绘制元素的图像顺序不正确。然后我发现如果我使用相同的 z 顺序并且没有设置 glDepthFunc(GL_LEQUAL),结果将...
使用客户端顶点数组在不使用 VBO 的 opengl 3.1+ 中进行渲染
我想知道是否可以使用顶点数组(客户端渲染不是即时模式)在 opengl 3.1+ 核心配置文件中绘制而不使用 VBO。我知道在 opengl 3.1+ 核心配置文件中使用 V...
当 glVertexAttribPointer 没有绑定缓冲区时出现 GL_NO_ERROR
我先调用了glVertexAttribPointer,但没有绑定GL_ARRAY_BUFFER: 如果指针不为 NULL,则必须将非零命名缓冲区对象绑定到 GL_ARRAY_BUFFER 目标(请参阅 glBindBuffer),
分别调用多少次vertex-shader、geometry-shader和fragment-shader来绘制一帧?
为了绘制一帧,或者说给定一个顶点数组,当这个数组正在传输并通过着色程序的各个阶段时,各个顶点之间是否存在严格的对应关系...
我正在尝试在按钮内渲染一些文本(这只是按钮大小的 vec2 和按钮位置的 vec2),并且我正在尝试将文本置于按钮内的中心。它适用于角色...
是否有适用于 macos/cocoa/opengl 的 CADisplayLink 等效项?
我发现了适用于 IOS 3.1+ 的 CADisplayLink,它会在刷新显示时触发事件,从而有效地允许您同步显示更新,而无需使用 NSTimer。 是...
我有一些简单的 SVG 图稿(图标和字形之类的东西),我想在 OpenGL 应用程序中显示它们(在 Debian 上用 C++ 开发,使用 Qt)。 显而易见的解决方案是使用 ImageMagick 库来
帧缓冲区未完成 GL_DEPTH_ATTACHMENT 渲染到纹理
我正在尝试在 OpenGL 中进行阴影映射,但无法将 GL_DEPTH_ATTACHMENT 专门渲染到帧缓冲区。 glCheckFramebufferStatus 不会返回完整,但仅在定位时返回...
有没有办法加载矢量图形文件,然后使用 OpenGL 渲染它?这是一个模糊的问题,因为我对矢量图形的文件格式不太了解。不过我知道 SVG。 转...
为什么在 opengl api 中计算的预过滤器辐射图与 dx11 相比看起来不同?
我有一个着色器,可以在 DX11 渲染器中计算辐射纹理,我想将其移植到 opengl。 //这个ifdef仅用于展示,它不在原始着色器中 // 因为版本很糟糕...
几个月前我开始了类似的问题Qt和OpenGL用于游戏开发 目前我不太确定我应该做什么。我经常读到不建议使用 Qt 玩游戏,
在 OpenGl C++ 中调试视频游戏时,我打印了变换/翻译矩阵并向我展示如下内容: 1 0 0 0 0 1 0 0 0 0 1 0 tx ty tz 1 但我认为应该是: 1 0 0 吨...
即使使用 LoadLibrary 和 GetProcAddress,ChoosePixelFormat 也会崩溃
在一台计算机上,我的应用程序在 OpenGL 初始化期间崩溃,特别是调用 ChoosePixelFormat 时。我找到了这个: wglCreateContext 在 C# 中失败,但在托管 C++ 中则不然 调用 GL 函数...
我正在使用 PNGDecoder 来解码作为高度图的 png。但是,当我只是打印控制台中返回的值时,我看到很少有 rgb 值返回为负数 -128, -128, -128, -...
在 3D 模型上选择枢轴点后,我的模型被移动到屏幕上的另一个位置。 我正在尝试使用 GL.LookAt 来实现围绕枢轴点功能的旋转。 GL.矩阵模式(