我有一个非常简单的着色器,它应用了一个简单的 WVP 变换。它适用于某些几何图形,但如果我用 glutStrokeString 绘制一个字符串,那么所有字符都被绘制在彼此的顶部。
是否可以使用自定义着色器绘制字符串,如果可以,着色器如何捕获字符串中单个字符的翻译?
这是我的着色器: static const char* pVS = " \n\ #version 330 \n\ \n\ layout (location = 0) in vec3 Position; \n\ \n\ uniform mat4 Projection; \n\ uniform mat4 View ;
\n\统一的mat4世界;
\n\ \n\ out vec4 颜色;\n\ \n\ void main() \n\ { \n\ gl_Position = 投影 * 视图 * 世界 * vec4(Position, 1.0);
\n\ 颜色 = vec4(clamp(Position, 0, 1), 1.0);
\n\ }";
static const char* pFS = " \n\
#version 330 \n\
\n\
in vec4 Color; \n\
\n\
out vec4 FragColor; \n\
\n\
void main() \n\
{ \n\
FragColor = Color; \n\
}";
这是绘制代码: glUniformMatrix4fv(projection_shader, 1, GL_FALSE, (const GLfloat*)&camera_projection); glUniformMatrix4fv(view_shader, 1, GL_FALSE, (const GLfloat*)&camera_transform); glUniformMatrix4fv(world_shader, 1, GL_FALSE, (const GLfloat*)&world_transform);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0);
glDisableVertexAttribArray(0);
unsigned char s[] = "test";
world_transform = scale(mat4(1), vec3(1.0f / glutStrokeLength(GLUT_STROKE_ROMAN, s)));
glUniformMatrix4fv(world_shader, 1, GL_FALSE, (const GLfloat*)&world_transform);
glutStrokeString(GLUT_STROKE_ROMAN, s);
glutSwapBuffers();