OpenGL(开放图形库)是一种独立于平台的图形标准和API,可用于桌面,工作站和移动设备。它旨在提供硬件加速渲染,因此与传统软件渲染相比,性能大大提高。 OpenGL用于CAD软件和计算机游戏等应用程序。 OpenGL标准以及OpenGL ES由Khronos集团控制。
我目前正在使用 OpenXR 和 OpenGL 开发一个 C++ 程序。 我设法将我想要的一切渲染到 VR 中。 我每只眼睛有一个帧缓冲区,然后还有 3 个图层(十字准线/菜单)...
首先,这是我第二次问这个问题。第一次,我得到了许多不同的技巧,我将它们应用于这个新问题。 目前,我正在开发 2D 图块渲染器。切换...
使用 3D 批量渲染器在另一个上进行 OpenGL 纹理渲染
所以,我当前的OpenGL渲染器似乎由于某种原因用纹理A绘制纹理B。我检查了 RenderDoc 中的插槽,它们似乎与 glBindTexture() 和 glActiveTexture() 正确绑定...
如何在 GitHub 操作 MacOS Runner 上测试 Kivy 应用程序?
我正在尝试使用 GitHub 操作在各种操作系统上测试我的 Kivy 应用程序。但是,我在 MacOS 操作系统上运行该应用程序时遇到问题,并不断收到此错误: 信息...
我的立方体: #define _CRT_SECURE_NO_WARNINGS #包括 #包括 #包括 #include“stb/stb_image.h” #包括 类型定义
添加帧缓冲区并绘制后,默认帧缓冲区片段坐标y在底部变为-600,顶部为0,而不是底部为0,顶部为600。 我搞砸了
我尝试以 60 FPS 渲染,但我的场景渲染速度远高于 60 FPS。 这是我的渲染循环代码,这是以所需 FPS 渲染的正确方法还是有赌注......
我有一个非常简单的C代码,我试图在其中使用OpenGl。 当我包含以下文件时 #包括 #包括 #包括 #包括 我有一个非常简单的 C 代码,我试图在其中使用 OpenGl。 当我包含以下文件时 #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> #include <stdlib.h> 我收到以下错误(还有更多错误,但它们很相似): C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\GL/gl.h(1152):错误 C2144:语法错误:“void”前面应带有“;” 但是当我包括 #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> #include <stdlib.h> 我收到以下错误 \mainfile.cpp(4) : 致命错误 C1083: 无法打开包含文件: 'GL/glut.h': 没有这样的文件或目录 知道发生了什么吗? 我使用的是XP,VS2005 GLUT 不是 OpenGL 的一部分。您需要安装它,这就是该错误所说的内容。 根据这个其他答案,您首先需要windows.h。 在我的 SDK (v7.0a) 上没有 glut.h,只有 gl.h 和 glu.h。 Directory of C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\gl 04/26/2011 05:00 PM <DIR> . 04/26/2011 05:00 PM <DIR> .. 09/30/2009 08:27 PM 69,085 GL.h 09/30/2009 08:27 PM 18,284 GLU.h 2 File(s) 87,369 bytes 2 Dir(s) 191,961,296,896 bytes free 在我看来,您必须按照此处的说明手动安装其他头文件。 您应该下载 GLUT 并将其复制到您的项目路径。然后更换线路: #include <GL/glut.h> 通过这个: #include "glut.h" 并在编译器设置中,将 glut.lib 添加到链接库中 更多详细信息:OGLDev 教程
问题背景: 我需要将两个具有相同分辨率的图像对齐并在 OpenGL 画布上显示对齐情况。所以我像这样准备了顶点: 浮动顶点[] = { // 位置...
7-1_FinalProjectMilestones.exe 中的 0x09D7FEE9 处抛出异常:0xC0000005:读取位置 0x0E065000 时发生访问冲突。我不断收到此错误,我已经检查了目录等。仍然
为什么我在 C 语言中运行 OpenGL 程序时没有任何显示?
我正在通过 learnopengl.com 学习 OpenGL。我正在上相机课。运行时显示空白屏幕。预计会使相机围绕立方体旋转。我已经调试了一天了...
我最近学习了更多关于 OpenGL 的知识,有一个方面是关于检索本地驱动程序中 OpenGL 函数实现的函数指针,我不太明白(...
CUDA (Libtorch) 和 OpenGL 互操作的奇怪行为
我正在尝试编写函数将 OpenGL 纹理转换为 PyTorch 张量并在 C++ 应用程序中转换回来。为了测试它是否有效,我向张量添加了 128 来基本上使图像变亮,然后重新...
我试图用opengl 2.1和glsl 120显示纹理(是的,它是一个锅),但我不知道该怎么做,我能得到的只是一个黑色的四边形,我一直在遵循本教程:纹理立方体,Ope...
从 vec2 到 ivec2 的转换是否会导致依赖纹理读取?
我正在编写一个碎片着色器,它必须对给定像素周围区域中的给定纹理进行采样。我使用 texelFetch 而不是纹理,因为我想要相邻像素的精确值......
所以我正在尝试使用 Qt 为我的游戏实现一个编辑器,但我似乎无法破译 QOpenGLWidget 的工作原理。现在,我只想得到一个简单的三角形来渲染,然后我就可以担心
使用PyQt6和OpenGL绘制三角形(重写Qt6 C++示例)
我当前的 PyQt6 示例不显示窗口,也不给我任何错误消息。这个 PyQt6 示例只是 Qt C++ 的副本。以下 Qt C++ 示例即使在
我终于得到了一个使用纹理的四边形,为了清理我的代码,我决定将它移到一个单独的类中,但现在它消失了,没有任何错误消息。 主要文件: #包括 我终于得到了一个使用纹理的四边形,为了清理我的代码,我决定将它移到一个单独的类中,但现在它消失了,没有任何错误消息。 主文件: #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)返回指针的大小,而不是原始数组的大小。将尺寸作为单独的参数传递。
OpenGL:如何使用模板缓冲区丢弃比绘制到模板缓冲区的多边形更近的片段?
在我正在使用的引擎中,我正在绘制一些多边形,用作各种门户的模板,并且我想剪切它的深度,从某种意义上说,我在设置模板...