opengl-3相关内容

从窗口转换的深度分量->世界坐标

我正在开发一个程序,该程序绘制100x100的网格并允许用户单击单元格并更改颜色. 当前也可以单击,但是仅当在上面查看网格面(即camPos.z等于camLook.z)并且网格位于屏幕中央时才可以使用. 最近几天,我一直停留在从不同的相机位置或屏幕上的不同区域查看网格时选择正确的单元格. 我唯一的猜测是深度缓冲不能以某种方式反映照相机的当前位置,或者缓冲深度范围与照相机的近距和远 ..
发布时间:2020-05-20 23:06:05 其他开发

是否在顶点着色器中分割?

在顶点着色器中使用透视矩阵时,我应该编写代码以除以w还是在以后的阶段自动完成? 我提出这个问题的原因是,我已经看到许多使用以下方法的顶点着色器: gl_Position = matrix * pos; 如果后面有一个阶段可以将向量及其w分量相除,那么这是很有意义的. 但是,直到在顶点着色器中使用以下命令,我才使它起作用: gl_Position = matrix * p ..
发布时间:2020-05-20 23:05:56 其他开发

Anttweakbar glfw3 OpenGL 3.2无法绘制

在将AntTweakBar与现代的opengl(动态管道)和glfw3结合使用时遇到了一些麻烦.我正在使用一些着色器,并且我很确定问题出在相机或着色器上. 键盘快捷键可以用,但是我没有花哨的窗口,我应该有:( 这里是来源 #include #include #include #if __cplusplus ..
发布时间:2020-05-20 22:55:00 C/C++开发

在着色器中同时在同一纹理单元中使用不同的纹理类型

当我在着色器中尝试对不同的纹理类型(即正常的2D纹理和立方体贴图)使用相同的纹理单位(数字0)时,在程序中遇到了一个令人讨厌的问题.这样看来,GL在第一个glDrawArrays调用后发出了502H(无效操作). 在我的应用程序代码中,我将纹理加载到不同的纹理目标: void setup_textures() { unsigned int width, height; int ..
发布时间:2020-05-20 22:48:20 C/C++开发

OpenGL 3.x:使用顶点缓冲区对象和glDrawElements(...)时访问冲突

我无法通过使用顶点缓冲区对象来渲染某些几何图形.我打算绘制一个点平面,因此基本上是在我空间中每个离散位置上都有一个顶点.但是,我无法渲染该平面,因为每次调用glDrawElements(...)时,应用程序都会崩溃,并返回访问冲突异常.我猜初始化时一定有一些错误. 这是我到目前为止所拥有的: #define SPACE_X 512 #define SPACE_Z 512 typede ..
发布时间:2020-05-20 22:41:47 其他开发

如果我使用opengl进行绘图,那么SDL Renderer会没有用吗?

我正在学习SDL2,但是我也在使用使用OpenGL调用的imgui库.从网上各种博客上读到的内容来看,我无法轻松地混合使用SDL2渲染器和opengl调用;我要么使用另一个. 我阅读的大多数教程都使用渲染器,所以我不太了解如何在没有渲染器的情况下使用SDL2来绘制图元或精灵. 例如: http://lazyfoo.net/tutorials/SDL/11_clip_rendering_ ..
发布时间:2020-05-20 22:37:37 C/C++开发

在OpenGL中使用围栏同步对象

我正在尝试寻找可以在OpenGL中使用同步对象的方案.我的理解是,一旦将所有GL命令执行并实现后,一旦将同步对象放入GL命令流(使用glFenceSync()),就会发出信号. 如果同步对象是同步原语,为什么我们不能手动发送信号呢?该功能到底可以在哪里帮助GL程序员? 以下情况是正确的情况吗? Thread 1 : Load model Draw() glFenceSync() T ..
发布时间:2020-05-20 22:35:20 其他开发

为什么我们需要透视划分?

我知道透视划分是通过将x,y和z除以w来获得标准化的设备坐标的.但是我不明白这样做的目的.另外,它与剪辑有关吗? 解决方案 我的意思是为什么我们需要那个? 用通俗易懂的话说:使透视变形起作用.在透视投影矩阵中,Z坐标被“混合"到W输出分量中.因此,Z坐标的值越小,即越接近原点,则缩放的内容就越多,即在屏幕上越大. ..
发布时间:2020-05-20 22:27:02 其他开发

GLEW会做什么,为什么我需要它?

好吧,所以我已经知道为什么我需要GLEW了,但是只是到了一定程度. 如果我正在使用现代的OpenGL东西(可能从3.0版开始),并且/或者正在使用Core Profile,则需要GLEW,因为如果没有它,编译会产生错误,例如未声明glGenVertexArrays. 因此GLEW可能会做一些后台工作,包括我们可能要使用的现代OpenGL函数. 除此之外,它还有其他作用吗?另外,它 ..
发布时间:2020-05-20 22:26:31 其他开发

每个BindBuffer之后需要VertexAttribPointer吗?

我注意到,除非我重新调用VertexAttribPointer,否则BindBuffer之后将不会向着色器输入.那有必要吗?着色器的书写方式可能不会发生变化,只能更改所使用的缓冲区. 解决方案 tibur已经回答了实际问题,但我想我会添加一些上下文. glBindBuffer(GL_ARRAY_BUFFER, ...)本身不执行任何操作.可以将它视为glVertexAttribPoi ..
发布时间:2020-05-20 22:24:46 其他开发

在哪里可以找到不使用任何不推荐使用的功能的优质OpenGL 3.0在线教程?

我刚刚购买了OpenGL SuperBible的第五版.我很高兴他们避免使用不推荐使用的功能,但是他们的示例使用了GLTools. GLTools提供了大量有用的功能,可用于渲染简单的3D对象以及管理视锥,摄影机和变换矩阵. 一切都很好,但是提供的抽象隐藏了低级的细节,在我无法使用GLTools的代码(例如pyopengl)上,我遇到了困难.我在网上看到的绝大多数教程都使用即时模式,而我试图 ..
发布时间:2020-05-20 22:23:26 其他开发

由于非Ascii字符,顶点着色器无法编译?

因此,我开始使用带有glew和GLFW的OpenGL创建游戏引擎,并且在开始使用着色器时几乎立即遇到了问题: 它们未被使用,或者如果被使用,则没有任何作用. 我一直在用大量其他示例检查我的代码,并且它们都匹配,没有什么看起来不合适,并且我开始用尽了所有的想法和耐心(我一直在试图找出为什么要使用现在). 我的主要核心代码在这里: #include "headers/Def ..
发布时间:2020-05-20 22:19:16 C/C++开发

OpenGL:弃用处理什么?

OpenGL 3.0和3.1已弃用了许多我认为必不可少的功能.特别是在着色器中使用固定功能. 有人能解释一下这到底是怎么回事吗? 为什么他们认为有必要弃用这种显而易见的有用功能,而每个人显然都在使用它,而没有任何理智的硬件公司会删除对它的支持? 解决方案 正如您所说,没有硬件公司会删除对固定功能着色器的支持,因为已有许多使用它们的应用程序.但是,他们不想做的事情是弄清楚如何指定 ..
发布时间:2020-05-20 22:12:40 其他开发

在OpenGL中将顶点阵列与纹理结合起来

我正在尝试使用顶点数组绘制一个相当大的网格,其中包含大量的顶点.已经从这些纹理中确定了纹理,并且可以很容易地按照以下方式在即时模式下进行绘制: glBegin(GL_TRIANGLES) { for ( int faceIdx = 0; faceIdx ..
发布时间:2020-05-20 22:12:17 其他开发

glDrawElements和平面底纹

使用glDrawElements绘制对象时,是否可以在OpenGL中实现平面着色?理想的方法是,如果可能的话,对每个三角形仅计算一次法线. 该解决方案只能使用可编程管道(核心配置文件). 解决方案 确实存在解决此问题的方法,而不必复制顶点,但每个顶点都有一些限制(至少我在有限的OpenGL经验中可以想到这些限制). 我可以看到两个解决方案,它们可以为您在每个三角形上的法线提供恒定的 ..
发布时间:2020-05-20 22:11:52 其他开发

如何在立方体上获得平坦的法线

我正在使用不推荐使用的OpenGL,并且我的光照计算是在片段着色器上完成的.所以,我正在做平滑着色. 我的问题是,当我绘制一个立方体时,我需要平面法线.平面法线是指在面部中生成的每个片段都具有相同的法线. 到目前为止,我的解决方案是为每个面生成不同的顶点.因此,现在我有了24(6 * 4)个顶点,而不是有8个顶点. 但这对我来说似乎是错误的,复制了顶点.有没有更好的方法来获得平坦 ..
发布时间:2020-05-20 22:10:38 其他开发