- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过多年关于“顶点缓冲对象”(VBO)的了解,我终于决定尝试使用它们(我的东西通常对性能没有要求,显然...)
我将在下面描述我的实验,但总而言之,我发现“简单”直接模式(glBegin()/ glEnd()),顶点数组(CPU端)和VBO(GPU端)之间的性能无可区别。渲染模式。我试图了解这是为什么,在什么条件下我可以期望看到VBO大大超过其原始(双关语意)祖先。
实验详情
对于实验,我生成了一个包含大量点的(静态)3D高斯云。每个点都有与之关联的顶点和颜色信息。然后,我在连续的帧中围绕云旋转摄像机,这是一种“绕行”行为。同样,这些点是静态的,只有眼睛移动(通过gluLookAt())。数据在任何渲染之前生成一次,并存储在两个数组中以供渲染循环使用。
对于直接渲染,整个数据集将在单个glBegin()/ glEnd()块中渲染,并带有一个循环,该循环包含对glColor3fv()和glVertex3fv()的单个调用。
对于顶点数组和VBO渲染,整个数据集通过一次glDrawArrays()调用来渲染。
然后,我只需要在一个紧密的循环中运行一分钟左右,然后使用高性能计时器来测量平均FPS。
绩效结果##
如上所述,在台式机(XP x64、8GB RAM,512 MB Quadro 1700)和笔记本电脑(XP32、4GB ram,256 MB Quadro NVS 110)上,性能都是无法区分的。但是,它的确按预期的比例扩展了点数。显然,我也禁用了vsync。
笔记本电脑运行的特定结果(使用GL_POINTS渲染):
glBegin()/ glEnd():
最佳答案
优化3D渲染有很多因素。
通常有四个瓶颈:
关于performance - 什么时候VBO比 “simple” OpenGL原语(glBegin())快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/430555/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在使用 Cocoa + OpenGL 为 MacOS 构建一个小游戏来创建 GUI。该游戏是 BoulderDash-Clone,因此它基本上是一个 2D 对象数组,而且数量不多(一个关卡大约有
我以后还能用这些方法吗?另外,如果没有,有人可以推荐一些关于 lwjgl 中现代 OpenGL 的好教程吗?谢谢 最佳答案 在LWJGL中,“已弃用”只是意味着它已经过时了,我真的怀疑glBegin是
如标题所示,我希望每帧/更新只能调用一次 glBegin 和 glEnd ,因为我听说并且正在经历,如果每次更新多次调用它,速度会大大减慢。 这是我的渲染函数的代码: GL11.glTranslate
我正在创建一个程序,允许我在 3 个空间中绘制点,使用 Catmull-Rom 样条连接它们,然后围绕样条绘制一个圆柱体。我正在使用 GL_TRIANGLES_STRIP 以短间隔连接样条曲线周围绘制
我想制作一个 OpenGL 游戏,但现在意识到我在学校学到的东西 -> 直接通过 glBegin/glEnd 绘制对象 -> 是老式的和糟糕的。在互联网上阅读我发现顶点缓冲区对象和 GLSL 是 3d
我正在学习一些关于 OpenGL 的教程,但遇到了一个问题。我构建了一个名为 Mesh 的类,它在其构造函数中采用顶点数组并生成顶点数组等来进行绘图。问题是我什么也没看到。这是界面: class Me
我尝试设计一个场景,其中有 3 个球体和一条水平线作为赤道。我必须画出 3 个球体,但我不知道为什么线没有画出来。 这是我的代码,如果你能看出我哪里错了: #include #include vo
我正在计算很多顶点,然后用四边形 strip 显示它们以获得 3D 曲面图。 我对某些顶点有一种奇怪的行为,以不可预测的方式改变颜色。我尝试修复它,巧合的是,当我在前后放置 glPushMatrix(
我正在尝试并排绘制 2 个不同颜色的方 block ,我的问题是我无法让 glTranslatef 将我的第二个方 block 向右移动,第二个方 block 只是在第一个方 block 上绘制。 v
绘制大量点时,有没有办法改变点的大小?我知道有 glPointSize(float),但是有没有办法在“批处理”或数组中做到这一点? 我希望点具有基于数据属性的不同大小。例如每个点都有 x、y、z 和
我正在尝试学习为 iPhone 编写 OpenGL 应用程序。如何移植以下代码以与 OpenGL-ES 一起使用?我知道我必须将顶点存储在数组中,然后调用 glDrawArrays(),但是有没有最佳
经过多年关于“顶点缓冲对象”(VBO)的了解,我终于决定尝试使用它们(我的东西通常对性能没有要求,显然...) 我将在下面描述我的实验,但总而言之,我发现“简单”直接模式(glBegin()/ glE
glBegin(GL_TRIANGLE_STRIP); for(i; i <= degree; i++) { float
此代码仅呈现十二面体并完全忽略 glBegin(GL_TRIANGLES) block : glutSolidDodecahedron(); glBegin(GL_TRIANGLES); glNorm
我一直在我的函数中使用 glDrawArrays。 由于某些原因,我在使用 glDrawArrays 绘图时掉了大约 400fps。 为了测试,我调用了 Print 函数 2000 次。 不太确定为什
将调用 glBegin 和 glEnd 的代码括在方括号中的目的是什么?它是否具有程序或功能目的,或者仅仅是为了美学和风格?下面的代码是用 C 写的。 glBegin(GL_POLYGON); glC
我有这个程序,您可以在下面看到。程序应该将某些内容渲染到纹理,并且渲染的纹理应该被绘制以显示。但是当调用 glBegin(GL_QUADS) 时,程序在 display() 函数处失败。程序结束打印
我在 StackOverflow 上的某个地方找到了这种跨平台的绘制文本的方法: def drawText(x, y, text):
我是 OpenGL 编程的新手,一切都很好,直到我突然收到段错误,现在无法摆脱它。任何人都可以发现段错误并向我解释吗? 注意:虽然这是一项作业,但我不是来这里寻找答案的。事实上,我什至不会提及分配细节
我是一名优秀的程序员,十分优秀!