颜色比顶点少
Fewer Colors Than Vertices
在旧的已弃用的OpenGL中,我们可以这样做:
glBegin(...);
glColor3f(r_1,g_1,b_1);
glVertex3f(x_1, y_1, z_1);
glVertex3f(x_2, y_2, z_2);
...
glVertex3f(x_n, y_n, z_n);
glColor3f(r_2, g_2, b_2);
glVertex3f(x_(n+1), y_(n+1), z_(n+1));
glVertex3f(x_(n+2), y_(n+2), z_(n+2));
...
glVertex3f(x_2n, y_2n, z_2n);
...
glEnd();
也就是说,我说的是每n个连续的顶点都有相同的颜色。同样的可能是与新的和未弃用的OpenGL?
例如,如果我有一个立方体,这意味着我有36个顶点。如果我想让每个面都有一种颜色,那么每个连续的6个顶点必须共享这种颜色。目前,我人为地为每种颜色复制了6次颜色数据,以便顶点数组和颜色数组的大小相同。还有别的办法吗?希望我的问题很清楚。
也许这种伪代码能帮你弄清楚:
GLfloat color_state{r,g,b};
GLfloat normal_state{x,y,z};
...
glColor4f(r,g,b,a):
color_state.r = r
color_state.g = g
color_state.b = b
color_state.a = a
glNormalf(x,y,z):
normal_state.x = x
normal_state.y = y
normal_state.z = z
glVertex3f(x,y,z):
__glinternal_submit_vertex(
position = {x,y,z},
normal = normal_state,
color = color_state,
... );
这就是OpenGL immediate的内部工作方式。顶点之间不共享颜色。为每个提交的顶点从当前状态创建一个副本。现在,有了顶点数组和顶点缓冲对象,执行正确的数据复制的重担就落在您身上了。
相关文章:
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 如何在顶点着色器中使用VBO数据作为位置数据,在片段着色器中使用统一数据作为颜色数据
- GLSL 将颜色数据从片段着色器发送到顶点着色器似乎总是等于 0
- CGAL:加载.off文件后,如何访问顶点颜色
- 如何将每个顶点的颜色转换为时间或某些功能
- 每帧更改顶点的颜色 (OpenGL)
- 提升图initialize_vertex更改顶点颜色(访客)
- 未绘制每个顶点处的C++OpenGL颜色
- 在 HLSL 中获取顶点的颜色
- 如何在 Ogre3D 中检索模型顶点的运行时颜色
- 绘制具有不同颜色顶点的OpenGL颜色矩形
- 在breadth_first_search期间设置顶点的颜色
- 顶点颜色不能正常工作
- 顶点缓冲对象的颜色- DirectX vs OpenGL
- 如何在顶点缓冲区中以另一种颜色绘制顶点
- glVertexAttribPointer语言 - 顶点法线或颜色
- Assimp无法加载PLY模型的顶点颜色
- 当光照启用时,DirectX 9顶点颜色会消失
- Boost图形库-顶点颜色和graphviz输出的最小示例
- Opengl顶点颜色插值