- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实现了简单的 OBJ 解析器并使用平行六面体作为示例模型。我添加了基于四元数的旋转功能。下一个目标 - 添加光。我解析法线并决定将法线绘制为“调试”功能(以进一步更好地理解光)。但在那之后我坚持了下来:
这里是我的小旋转平行六面体。再看右下角的顶点和法线。我不明白为什么它会通过我的平行六面体呈现。它应该被隐藏起来。
我使用深度缓冲区(因为没有它,平行六面体在我旋转时看起来很奇怪)。所以我初始化它:
glGenRenderbuffers(1, &_depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, _frameBufferWidth, _frameBufferHeight);
并启用它:
glEnable(GL_DEPTH_TEST);
我生成了 4 个 VBO:平行六面体的顶点和索引缓冲区,线(法线)的顶点和索引缓冲区。我为两个模型使用了一个简单的着色器(如果需要的话——我可以稍后添加代码,但我认为一切都很好)。起初我画平行六面体,然后是法线。 这是我的代码:
// _field variable - parallelepiped
glClearColor(0.3, 0.3, 0.4, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
int vertexSize = Vertex::size();
int colorSize = Color::size();
int normalSize = Normal::size();
int totalSize = vertexSize + colorSize + normalSize;
GLvoid *offset = (GLvoid *)(sizeof(Vertex));
glBindBuffer(GL_ARRAY_BUFFER, _geomBufferID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indicesBufferID);
glVertexAttribPointer(_shaderAtributePosition, vertexSize, GL_FLOAT, GL_FALSE, sizeof(Vertex::oneElement()) * totalSize, 0);
glVertexAttribPointer(_shaderAttributeColor, colorSize, GL_FLOAT, GL_FALSE, sizeof(Color::oneElement()) * totalSize, offset);
glDrawElements(GL_TRIANGLES, _field->getIndicesCount(), GL_UNSIGNED_SHORT, 0);
#ifdef NORMALS_DEBUG_DRAWING
glBindBuffer(GL_ARRAY_BUFFER, _normalGeomBufferID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _normalIndexBufferID);
totalSize = vertexSize + colorSize;
glVertexAttribPointer(_shaderAtributePosition, vertexSize, GL_FLOAT, GL_FALSE, sizeof(Vertex::oneElement()) * totalSize, 0);
glVertexAttribPointer(_shaderAttributeColor, colorSize, GL_FLOAT, GL_FALSE, sizeof(Color::oneElement()) * totalSize, offset);
glDrawElements(GL_LINES, 2 * _field->getVertexCount(), GL_UNSIGNED_SHORT, 0);
#endif
例如,我理解如果我将这两个绘制调用合并为一个(并对平行六面体和法线使用相同的 VBO - 一切都会好起来的)。但是会不舒服,因为我用的是直线和三角形。
应该有另一种方法来固定 Z 顺序。我不敢相信复杂的场景(例如天空、土地和建筑物)是通过一次绘制调用绘制的。
那么,我缺少什么?
提前致谢。
最佳答案
如果要渲染到窗口表面,则需要将深度请求作为 EGL 配置请求的一部分。您分配的深度渲染缓冲区仅在您将其附加到帧缓冲区对象 (FBO) 以进行离屏渲染时才有用。
关于c++ - 打开 GL ES 2.0 多个 drawElements 和绘制顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343408/
在我的程序中,我基本上将所有对象放在一个缓冲区中,现在当我想绘制多个对象时遇到问题,如果我只绘制一个它仍然有效。 当我粗略地将所有 glDrawArrays 更改为 glDrawElements 调用
我正在制作一个小型的 2D 游戏演示,从我读过的内容来看,最好使用 drawElements()绘制索引三角形列表而不是使用 drawArrays()绘制一个无索引的三角形列表。 但据我所知,使用 d
我正在尝试学习 WebGL,所以我从 webgl 教程中获取了一些代码,并尝试添加我自己的行,但是每当我运行它时,它都会给我这个错误: .WebGLRenderingContext: GL ERROR
我的问题是:为什么相同的示例 WebGL 代码会在不同平台/浏览器上产生不同的输出? 在 Windows 上的 Firefox 30.0(以及最新的 32)中,但在 Mac 上则不然,在渲染点时进行多
在绘制之前清除屏幕时,RenderingContext.drawElements 是否正确? 考虑这些屏幕截图,这些屏幕截图显示了调用 drawElements 的一个步骤,其中已绘制的对象被删除。
这样的OpenGL ES序列可用于一次渲染多个对象: glVertexPointer(...params..., vertex_Array ); glTexCoordPointer(...params
提前谢谢你。 我是 Webgl 的新手,我不太了解 drawElements 方法和我要绘制的当前顶点缓冲区之间的联系。我大致了解 drawArray 方法发生了什么(例如创建缓冲区,将其绑定(bin
这是一个相当特定于 WebGL 的问题。我无法理解 drawElements 的特定于 WebGL 的实现。这是 API 规范。 From the WebGL specification . 我究竟如
现在我正在按照 Jamie King Qt OpenGL 教程学习 OpenGL。 (他们很好)。 在其中一个教程中,我遵循它但无法使用 DrawElemets 绘制两个顶点缓冲区三角形。它适用于 G
编辑:我应该澄清一下...... 这就是我计划的工作方式: 每次我的应用程序渲染(60hz)时,我都想将所有要渲染的顶点放入一个巨大的缓冲区中。然后,该缓冲区将上传到 GPU。 (glBufferda
今天下午,当我从使用 VBO 转向 VAO/VBO 时,我一直在努力说服我的 openGLES2.0 代码正确执行。基本上,我正在按照 Apple 关于 openGLES 的“专家”建议进行工作,并转
我想从 model.json 文件中绘制一个 3d 模型(例如房子)。我用蓝色等单一颜色绘制房子没有问题。但是,当我尝试使用纹理而不是颜色时,我收到一个错误: WebGL: DrawElements:
我目前正在学习 android 开发以编写基于图 block 的游戏,但我无法让 OpenGLES 正常工作。 所以我尝试使用索引数组渲染四边形,但它只渲染了四边形的第一个三角形,第二个三角形丢失了,
我正在尝试绘制一个简单的三角形数组。它们都是相连的,所以我目前正在使用 DrawArrays 和 GL_TRIANGLE_STRIP。但是,在检查 XCode 分析器时,它建议改用 DrawEleme
本文整理了Java中com.google.gwt.webgl.client.WebGLRenderingContext.drawElements()方法的一些代码示例,展示了WebGLRenderin
所以,我开始了一段相当即时的视觉化 3-D 编程世界之旅。我目前在 webgl 上投入了大量资金,在 JavaScript 和大多数面向 Web 的语言方面有很强的背景,但这是我的第一种图形语言。 在
我实现了简单的 OBJ 解析器并使用平行六面体作为示例模型。我添加了基于四元数的旋转功能。下一个目标 - 添加光。我解析法线并决定将法线绘制为“调试”功能(以进一步更好地理解光)。但在那之后我坚持了下
大家好,我这几天一直在学习 webgl。 有两个片段可以完成相同的事情 - 绘制一个正方形。一种是对 6 个顶点使用 gl.drawArrays,一种是对 4 个顶点使用 gl.drawElement
我是一名优秀的程序员,十分优秀!