标签: opengl-4

从版本4.1开始,OpenGL中的文本渲染技术是什么?

关于OpenGL中的文本呈现已经有很多问题,例如:

但主要讨论的是使用固定功能管道渲染纹理四边形.当然着色器必须做出更好的方法.

我并不真正关心国际化,我的大部分字符串都是情节刻度标签(日期和时间或纯数字).但是这些图将以屏幕刷新率重新渲染,并且可能会有相当多的文本(屏幕上不超过几千个字形,但足够硬件加速布局会很好).

使用现代OpenGL进行文本渲染的推荐方法是什么?(引用现有软件使用该方法是很好的证据,它运作良好)

  • 接受例如位置和方向以及字符序列并发出纹理四边形的几何着色器
  • 渲染矢量字体的几何着色器
  • 如上所述,但改为使用曲面细分着色器
  • 用于进行字体光栅化的计算着色器

opengl shader text glsl opengl-4

196
推荐指数
4
解决办法
7万
查看次数

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

我知道在过去的几年中也有类似的问题,但在做了一些研究后,我仍然无法决定从哪里学习,应该学什么.我还希望通过更多的C++ OOP和着色器方法来了解您对现代OpenGL编程的当前实际观点.并确保我对某些事情的实际理解是有效的.

所以...目前我们已经有了OpenGL 4.2,当我读到某个地方需要dx11硬件(它是什么意思?)和一组'侧'库时,例如创建窗口.

有最常见的GLUT,我非常讨厌.其中一个主要原因是函数调用,它不允许我们创建主循环的方式自由.正如一些人所说,它不适合游戏.

还有GLFW,实际上对我来说非常好而直截了当.出于某种原因,人们将其与GLUT一起使用.(它不仅提供窗口初始化,还提供其他实用程序?)

还有SFML和SDL(SDL <SFML imo),而它们两者有时需要使用奇怪的方法来处理OGL,并且在某些情况下并不是很快.

而且我们还有GLEW,这是扩展加载实用程序......等待...... GLUT/GLFW已经不是扩展了吗?是否有任何理由使用它,就像是否有任何真正重要的扩展感兴趣?

直到现在我们都有窗口创建(和一些实用程序),但是...... OGL不会处理纹理,也不管3D模型.我需要多少个其他库?

我们现在提一下教育部分.有着名的NeHe教程.用C语言编写,使用WinApi,代码极其不清晰,过时的解决方案,但仍然是最受欢迎的解决方案.可以找到像Red Book这样的东西,这些东西与2.x或3.x等版本有关,但是只有少数(和未完成的)教程提到4.x.

怎么办?

c++ opengl shader opengl-4

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

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万
查看次数

glGenBuffers和glCreateBuffers的区别

鉴于我们使用OpenGL 4.5或支持GL_ARB_direct_state_access扩展,我们有新功能glCreateBuffers.

此函数具有相同的签名glGenBuffers,但指定:

返回n先前未使用的缓冲区名称buffers,每个缓冲区名称表示初始化的新缓冲区对象,就好像它已绑定到未指定的目标一样

glGenBuffers 有以下规格:

调用返回的缓冲区对象名称glGenBuffers不会被后续调用返回,除非它们首先被删除glDeleteBuffers.

因此,返回的任何缓冲区名称glCreateBuffers将永远不会再次使用,但可以使用glGenBuffers.

似乎glCreateBuffers总会创建新的缓冲区对象并返回它们的名称,并且glGenBuffers只有在之前没有删除过的缓冲区时才会创建新的缓冲区.

添加此功能有什么优势?

我什么时候应该glCreateBuffers用完glGenBuffers


PS
我认为这代表所有glCreate*添加的功能GL_ARB_direct_state_access

opengl opengl-4

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

OpenGL 4.1和3.1+,有哪些主要区别?

我知道OpenGL 4和3非常相似,尤其是3.1和4.1.由于两者基本上一起发布,因此很难理解OpenGL 4.0/4.1的基本原理.

在以前的OpenGL版本中,次要版本会向上递增,直到大量更改累积到新的主要版本中.OpenGL 3.x和4.x引入了向后兼容的API变化,然后OpenGL 3.2和3.3被认为是3系列的特定分支,它们不向前兼容,而3.1与4.1+兼容

与OpenGL 3.1相比,OpenGL 4.1提供哪些主要差异,保证将其归入新的主要版本?

额外奖励:在任何情况下,任何差异都会导致GL3的性能提升或只是可访问性吗?

编辑:基于答案的一些额外发现


OpenGL 3.3用于补充OpenGL 4.0,以尽可能多地将功能集成到旧硬件中.OpenGL的3和4,3.3之间进行选择可以是一个更好的选择有时.4.1添加了GL ES 2.0兼容性和一些不错的功能.


更大的工作流程差异之一是通过新的曲面细分着色器在管道中添加GPU编程步骤.另一个是要渲染的多个视口.我相信新的细节级别功能会改变我正在使用的工作流程,也许还会改变其他工作流程,尽管我还没有深入研究这个功能.

如果您发现任何误解或需要改进的地方,请与我们联系.

主题演讲(显然是在回答问题时从答案中删除了..暂时参考实际答案是什么.)

附录G-K对于OpenGL 3.1功能,通过OpenGL 4.1 功能

Khronos Group发布OpenGL 4.0可能"更容易阅读":)

  • 采样器对象
  • 实例化数组和着色器
  • texture_cube_map_array和texture_gather

  • GLSL 4.0动态LOD

  • shader_subroutinesample_shading
  • separate_shader_objects
  • 增加纹理/渲染缓冲区所需的大小
  • 64位浮点顶点属性
  • get_program_binary
  • +2 Tesselation着色器

opengl 3d performance opengl-3 opengl-4

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

修复3D相机朝其面向的方向移动?

短版(TL; DR)

只要旋转/轴与世界一致,我就会Camera附加一个SceneNode并且运动工作正常SceneNode.然而,当物体在旋转不同的方向,以"看",并告知"前进"它并没有沿着新的"前进"方向移动.相反,它继续沿着应用旋转之前面向的方向移动.

细节和例子

我有一个场景图来管理3D场景.图形是一个SceneNode对象树,它们知道它们相对于父元素和世界的变换.

根据TL; DR; 片段,假设你有一个cameraNode零旋转(例如朝北),然后cameraNode围绕+ Y"向上"轴向左旋转90度,即向西看.到目前为止事情还可以.如果你现在尝试移动cameraNode现在向西的"向前",那么cameraNode移动就好像"向前"仍然面向北方.

简而言之,它就像从未旋转过一样.

下面的代码显示了我最近尝试过的内容以及我(当前)最佳猜测,即缩小最可能与问题相关的区域.

相关SceneNode成员

SceneNode实施具有以下字段(仅是有关这个问题显示):

class GenericSceneNode implements SceneNode {
    // this node's parent; always null for the root scene node in the graph
    private SceneNode parentNode;

    // transforms are relative to a parent scene node, if any
    private Vector3 relativePosition = Vector3f.createZeroVector();
    private Matrix3 relativeRotation …
Run Code Online (Sandbox Code Playgroud)

java 3d opengl-4

13
推荐指数
1
解决办法
736
查看次数

glVertexAttribPointer和glVertexAttribFormat:有什么区别?

OpenGL的4.3和OpenGL ES 3.1添加若干替代功能用于指定顶点数组:glVertexAttribFormat,glBindVertexBuffers等,但我们已经有了用于指定顶点数组功能.即glVertexAttribPointer.

  1. 为什么要添加与旧版API相同的新API?

  2. 新API如何运作?

opengl opengl-es opengl-4

12
推荐指数
1
解决办法
2480
查看次数

在OpenGL4.0中使用交错属性数组获得性能提升

我使用OpenGL4.X.最近我读到了这个 Apple OpenGLES2文档,其中声明使用交错属性数组可以提高IOS移动设备的性能,并且是推荐的方式(而不是使用属性块).

对于那些不明白我的意思的人来说,这是一个例子:

单个属性数组中的属性块:

 float vertices[]{
 //Triangle vertices:

  v0x , v0y , v0z ,
  v1x , v1y , v1z ,
  v2x , v2y , v2z ,

  //Triangle UVs:

  uv0s , uv0t ,
  uv1s , uv1t ,
  uv2s , uv2t ,

  //Triangle Normals:
  n0x , n0y , n0z ,
  n1x , n1y , n1z ,
  n2x , n2y , n2z 

}
Run Code Online (Sandbox Code Playgroud)

交错属性数组:

 float vertices[]{


  v0x , v0y , v0z ,
  uv0s , uv0t ,          ////vertex 1 attributes
  n0x , …
Run Code Online (Sandbox Code Playgroud)

c++ opengl performance opengl-4

11
推荐指数
2
解决办法
2772
查看次数

标签 统计

opengl-4 ×10

opengl ×9

opengl-3 ×4

shader ×3

3d ×2

c++ ×2

glsl ×2

performance ×2

glew ×1

java ×1

line ×1

opengl-es ×1

text ×1