【发布时间】:2019-03-17 23:38:03
【问题描述】:
我正在用 C++ 编写一个程序,使用 OpenGL 根据用户输入插入和编辑三角形。在屏幕上显示一个三角形后,用户可以单击任何顶点并通过按数字键决定为其分配什么颜色。每个带编号的键代表一种颜色,1 可以是红色,2 可以是蓝色,以此类推到 9。
现在我有代码来识别他们点击了 VBO 中的哪个顶点,但我不明白一旦我识别了顶点该怎么做。我知道我可以使用我现在正在使用的 glUniform3f,但这会使场景中的每个三角形都具有相同的颜色。
顶点着色器和片段着色器:
Program program;
const GLchar* vertex_shader =
"#version 150 core\n"
"in vec2 position;"
"void main()"
"{"
" gl_Position = vec4(position, 0.0, 1.0);"
"}";
const GLchar* fragment_shader =
"#version 150 core\n"
"out vec4 outColor;"
"uniform vec3 triangleColor;"
"void main()"
"{"
" outColor = vec4(triangleColor, 1.0);"
"}";
我是否需要为颜色创建第二个 VBO?如果是这样,我如何设置代码以同时使用它们?我对 OpenGL 很陌生,所以任何事情都有帮助。
【问题讨论】:
-
使用 VBO 很容易。您可以只更新由
glBufferSubData更改的缓冲区部分。如果您只喜欢制服,那么您必须传递选定的顶点标识符(其 VBO 中的位置)并通过与gl_VertexID比较在顶点着色器中使用 if。
标签: c++ opengl colors glsl vertex-shader