- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个由多个三角形面定义的曲面。整个表面为单色。
到目前为止,我分别绘制了每个三角形。对于每个三角形,我传递了 3 个顶点、3 个索引、3 个颜色值(相同颜色)和 3 个法线值(全部等于三角形的表面法线)。然后我会将所有这些数组推送到 VBO 并渲染曲面。
最近我意识到,与纹理渲染方法相比,这是相当浪费的。现在,我用 2x2 像素阵列创建纹理(所有颜色与我想要的曲面颜色相同)。然后我计算曲面上所有顶点的纹理坐标 (s,t)。因此,我有效地拉伸(stretch) 2x2 像素纹理以适合我的曲面。对于某些表面来说,这非常有效。此外,这还需要更小的缓冲区(因为现在顶点只有单个法线值和颜色值,因此只需提及一次)。然而,通过这种方法,有时曲面根本不渲染。我的怀疑在于我计算纹理坐标的方式。如果表面稍微弯曲是可以的,但是当表面绕轴旋转并形成闭合边界时,纹理坐标似乎会混淆显卡。
我的问题是,OpenGL ES 中使用单一颜色绘制表面的推荐方法是什么?
更新 - 接受答案的说明
我花了一段时间才理解 genpfault 的答案是如何工作的。所以这里有一个解释。上面我描述了绘制纯色表面的两种方法 - 1. 使用 rgba 颜色值,2. 使用单色纹理。 genpfault 的回答解释了如何有效地执行方法 1。
我通过多次传递每个顶点相同的 rgba 颜色值来实现第一种方法。因此,我在顶点着色器代码中读取此颜色值作为属性。在genpfault的方法中,我们在调用drawArray/Elements之前将颜色设置为统一变量。这将需要更改顶点着色器以从统一变量而不是属性中读取值。
最佳答案
只需通过glColor()
设置当前颜色在渲染每个补丁之前。
这样您就不必传入每个顶点的颜色组件。
关于opengl-es - 如何在 OpenGL ES 中绘制纯色曲面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6815066/
我是一名优秀的程序员,十分优秀!