glutStrokeString and shaders - all characters on top of each other
我有一个非常简单的着色器,该着色器应用了straigthforward WVP变换。它在某些几何形状下可以正常工作,但是如果我用glutStrokeString绘制字符串,则所有字符都一个一个地绘制。
是否可以使用自定义着色器绘制字符串,如果可以,着色器如何捕获字符串中单个字符的翻译?
这是我的着色器:
静态const char * pVS =" n
#version 330 n
n
vec3位置中的布局(位置= 0); n
n
均匀的mat4投影; n
统一的mat4视图;
n
统一的mat4世界;
n
n
vec4颜色; n
n
void main() n
{ n
gl_Position =投影*视图*世界* vec4(位置1.0);
n
颜色= vec4(clamp(Position,0,1),1.0);
n
}";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | static const char* pFS =" \ #version 330 \ \ in vec4 Color; \ \ out vec4 FragColor; \ \ void main() \ { \ FragColor = Color; \ }"; |
这是绘制代码:
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);
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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(); |
简短的版本是:
长版本是
最好的选择是使用