gpt4 book ai didi

opengl-es - 如何在 OpenGL ES 中绘制纯色曲面?

转载 作者:行者123 更新时间:2023-12-03 00:03:00 25 4
gpt4 key购买 nike

我有一个由多个三角形面定义的曲面。整个表面为单色。

到目前为止,我分别绘制了每个三角形。对于每个三角形,我传递了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com