标签: opengl-3

OpenGL VAO最佳实践

我面临一个问题,我相信是VAO依赖的,但我不确定..

我不确定VAO的正确用法,我在GL初始化期间做的事情很简单

glGenVertexArrays(1,&vao)
Run Code Online (Sandbox Code Playgroud)

接下来是

glBindVertexArray(vao)
Run Code Online (Sandbox Code Playgroud)

后来,在我的绘图管道中,我只调用glBindBuffer(),glVertexAttribPointer(),glEnableVertexAttribArray()等等,而不关心初始绑定的VAO

这是正确的做法吗?

opengl opengl-3 vao

77
推荐指数
3
解决办法
4万
查看次数

OpenGL 4.x学习资源

我知道有一些关于学习OpenGL的问题.这就是我所知道的:

  • 3D的数学
  • 三维理论

以下是我想知道的: - OpenGL 4.0 核心配置文件(或后者) - Shader Language 400(或后者) - 上面的每一部分(如果它不能在供应商之间工作那么它仍然不会打扰我)

这是我不想知道的 - 固定功能管道(永远不会使用它!) - 旧的OpenGL - 兼容性配置文件

我更喜欢大部分信息,如教程,系列文章,书籍.

PS如果您了解opengl 3.x核心配置文件的资源,也可以发布它们

opengl shader opengl-3 opengl-4

40
推荐指数
5
解决办法
2万
查看次数

我在哪里可以找到一个不使用任何弃用功能的优秀在线OpenGL 3.0教程?

我刚刚购买了第五版的OpenGL SuperBible.我很高兴他们避免使用已弃用的功能,但他们的例子可以使用GLTools.GLTools提供了一系列有用的功能,用于渲染简单的3D对象和管理视图截头,相机和变换矩阵.

这一切都很棒,但提供的抽象隐藏了低级细节,我很难移动到我无法使用的代码GLTools- 例如,pyopengl.我在网上看到的绝大多数教程都使用了立即模式,我试图避免这种模式.那些使用glDrawArrays使用的glEnableClientState,这我也想避免的.

我正在寻找的是完全符合OpenGL 3.x的入门教程.如果这个订单太高了,也许洗衣清单很好的"起点"功能将是有序的.

opengl pyopengl deprecated opengl-3

33
推荐指数
1
解决办法
3万
查看次数

了解顶点数组对象(glGenVertexArrays)

我对使用以下方法生成/创建顶点数组对象(VAO)的观点感到困惑:

glGenVertexArrays(GLsizei n, GLuint *arrays);
Run Code Online (Sandbox Code Playgroud)

glBindVertexArray(GLuint);
Run Code Online (Sandbox Code Playgroud)

因为我仍然可以创建一个缓冲区对象,说了顶点,并描述了该缓冲区对象glVertexAttribPointer,并glEnableVertexAttribArray没有创造过一个VAO.

我的问题是,如果您不必实际创建VAO来描述缓冲区对象中的数据,那么为什么OpenGL SuperBible 5ed这样的源包含在创建VBO时创建VAO的调用?它们仅用于我尚未发现的更高级的主题,我完全糊涂了吗?

此外,我在VBO上阅读wikipedias条目时首次遇到这个问题,他们的示例代码不包含任何调用,glGenVertexArrays()但他们仍然用数据描述数据glVertexAttribPointer().Wiki VBO条目 - 出于什么原因创建VAO的示例?

c c++ opengl opengl-3

32
推荐指数
3
解决办法
2万
查看次数

gluPerspective在OpenGL 3.1中删除了,任何替换?

我正在尝试在网上阅读一些OpenGL教程.问题是我找到了一些旧的gluPerspective().gluPerspective在OpenGL 3.0中已弃用,在3.1中已删除.

我可以用什么功能代替?

我正在使用安装了最新FreeGlut的C++.

c++ freeglut deprecated opengl-3

31
推荐指数
3
解决办法
3万
查看次数

glVertexAttribPointer提升GL_INVALID_OPERATION

我正在尝试整合一个非常基本的OpenGL 3.2(核心配置文件)应用程序.在下面的代码中,应该创建一个包含三角形顶点位置的VBO,调用glVertexAttribPointer失败并引发OpenGL错误GL_INVALID_OPERATION.这是什么意思,我该如何解决它?

GLuint vbo, attribLocation = glGetAttribLocation(...);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLfloat vertices[] = { 0, 1, 0, 1, 0, 0, -1, 0, 0 };
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(attribLocation);
// At this point, glGetError() returns GL_NO_ERROR.
glVertexAttribPointer(attribLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);
// At this point, glGetError() returns GL_INVALID_OPERATION.
Run Code Online (Sandbox Code Playgroud)

c++ opengl opengl-3

30
推荐指数
1
解决办法
1万
查看次数

如何在现代OpenGL中进行光线跟踪?

所以,我应该开始点亮我的平面彩色模特.测试应用程序是仅实现最新方法的测试用例,因此我意识到理想情况下它应该实现光线跟踪(从理论上讲,它可能是几年内实时图形的理想选择).

但是我从哪里开始呢?

假设我从未在旧的OpenGL中完成照明,所以我将直接使用不推荐的方法.

应用程序当前正确设置了顶点缓冲区对象,顶点,法线和颜色输入,并以平面颜色正确绘制和转换空间模型.

是否存在从平坦的彩色顶点到通过GLSL获得正确最终结果所需的全部信息的来源?理想情况下,可能需要任何其他额外的照明方法来补充它.

opengl graphics raytracing opengl-3

28
推荐指数
3
解决办法
4万
查看次数

哪些OpenGL功能不是GPU加速的?

当我读到这篇文章(来自OpenGL wiki)时,我很震惊:

glTranslate,glRotate,glScale

这些硬件加速了吗?

不,没有已知的GPU可以执行此操作.驱动程序计算CPU上的矩阵并将其上载到GPU.

所有其他矩阵操作也在CPU上完成:glPushMatrix,glPopMatrix,glLoadIdentity,glFrustum,glOrtho.

这就是GL 3.0中不推荐使用这些函数的原因.您应该拥有自己的数学库,构建自己的矩阵,将矩阵上传到着色器.

长一段时间里,我认为大多数OpenGL函数都使用GPU来进行计算.我不确定这是否是一种常见的误解,但经过一段时间的思考,这是有道理的.由于状态切换太多,旧的OpenGL函数(2.x及更早版本)实际上不适合实际应用程序.

这让我意识到,许多OpenGL函数可能根本不使用GPU.

所以,问题是:

哪个OpenGL函数调用不使用GPU?

我相信知道上述问题的答案将有助于我成为一名更好的OpenGL程序员.请分享一些您的见解.

编辑:

我知道这个问题很容易导致优化水平.这很好,但这不是这个问题的意图.

如果有人知道某个流行实现的一组GL函数(如AshleysBrain建议,nVidia/ATI,可能依赖于操作系统)不使用GPU,那就是我所追求的!

合理的优化指南稍后会出现.让我们关注本主题的功能.

EDIT2:

本主题不涉及矩阵转换的工作原理.还有其他 主题.

opengl gpu hardware-acceleration opengl-3

27
推荐指数
4
解决办法
1万
查看次数

glLineStipple在OpenGL 3.1中已弃用

glLineStipple已在最新的OpenGL API中弃用.什么被取代?如果没有更换,我怎么能得到类似的效果?(我当然不想使用兼容性配置文件...)

opengl glsl line opengl-3 opengl-4

24
推荐指数
2
解决办法
9454
查看次数

GLEW做了什么以及为什么需要它?

好的,所以我已经知道为什么我需要GLEW,但只有一点.

如果我使用现代OpenGL的东西,可能是从版本3.0开始,和/或使用核心配置文件,那么GLEW是必需的,因为没有它编译产生的错误,如未glGenVertexArrays声明.

所以GLEW做了一些背景工作,包括我们想要使用的现代OpenGL函数.

除此之外,还有什么其他的吗?另外,它是如何工作的.

举个例子,它是否改进了跨平台编译?(例如,如果从Linux迁移到Windows或OS X,需要对代码进行少量修改?

它是否也改善了图形硬件的"跨平台性"?例如,假设我们有两台相同的计算机,包括操作系统.在一个系统上使用OpenGL 4.3命令编译程序.如果其他系统有只支持OpenGL 3.3的显卡或驱动程序,那么GLEW会帮忙吗?(也许是为旧版OpenGL编译着色器?)

所以你可能会发现我实际上并不知道GLEW做了什么或它是如何做到的.

最后一点; 有谁知道如何使用GLEW与GLFW?我可能会将其作为一个单独的问题发布.

opengl glew opengl-3 opengl-4

24
推荐指数
2
解决办法
1万
查看次数