Open_gl 1 种颜色着色器
Open_gl 1 color shaders
我想我的着色器有问题。它应该打印 1 种颜色纹理。它不起作用。如果我绑定 3 色 (GL_RGB) 纹理,它会像原始图片一样显示它。我像这样绑定纹理:
glTexImage2D(GL_TEXTURE_2D, 0, GL_R, freetype_letters[i]->glyph->bitmap.width, freetype_letters[i]->glyph->bitmap.rows, 0, GL_R, GL_UNSIGNED_BYTE, freetype_letters[i]->glyph->bitmap.buffer);
数组现在是恒定矩形大小的测试版本:
float letter_quad[]={
0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f
};
glGenVertexArrays(1, &letter_box_a[i]);
glGenBuffers(1, &letter_box_b[i]);
glBindVertexArray(letter_box_a[i]);
glBindBuffer(GL_ARRAY_BUFFER, letter_box_b[i]);
glBufferData(GL_ARRAY_BUFFER, 4 * 2 * sizeof(float), letter_quad, GL_STATIC_DRAW);
glVertexAttribPointer(0,2,GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(0);
然后我调用函数负责选择要绘制的字母并绘制它:
draw_letter(0.0f, 0.0f, 'K', Text_shader, letter_texture, letter_box_a, letter_box_b, glm::vec3(1.0f, 1.0f, 1.0f));
以下是声明:
void draw_letter(float PosX, float PosY, unsigned char letter, unsigned int Text_shader, unsigned int *letter_texture, unsigned int *letter_box_a, unsigned int *letter_box_b, glm::vec3 Color){
unsigned int i = (unsigned int)letter;
glBindBuffer(GL_ARRAY_BUFFER, letter_box_b[i]);
glBindTexture(GL_TEXTURE_2D, letter_texture[i]);
glBindVertexArray(letter_box_a[i]);
glUseProgram(Text_shader);
int color_shader = glGetUniformLocation(Text_shader, "InColor");
glUniform3fv(color_shader, 1, glm::value_ptr(Color));
glm::vec2 Position = glm::vec2(PosX, PosY);
int pos_shader = glGetUniformLocation(Text_shader, "InPosition");
glUniform2fv(pos_shader, 1, glm::value_ptr(Position));
glDrawArrays(GL_QUADS,0,4);
}
顶点着色器。注意"就位"不是纹理的位置!它是屏幕上应该显示制服发送的信件的位置。我不确定我是否可以从顶点数据发送纹理坐标。Ofc 阵列在 x 上为 0.0 - 0.5,在 y 上为 0.0 到 0.5。这个测试版本将其调用 2 应该给出纹理绳索 0.0 到 1.0。InPos 更改了 2->3 坐标:
#version 330 core
layout (location=0) in vec3 aPos;
uniform vec3 InColor;
uniform vec2 InPosition;
out vec2 TexCoord;
out vec3 OutColor;
void main(){
TexCoord= vec2(aPos.x*2, aPos.y*2);
gl_Position= vec4(aPos.x + InPosition.x, aPos.y + InPosition.y, 0.0, 1.0);
OutColor= InColor;
}
片段着色器:
#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
in vec3 OutColor;
如果有帮助,我有时会在控制台中出现错误: 断言失败! func_exponential.inl, 166行 表达式 x> 属类型(0) 这是 glm 库中的功能。有些除以 0。但它可能不相关。
>GL_R
不是有效的内部格式,也不是有效的像素传输格式。事实上,如果您一直使用仅内核的 OpenGL 标头,它甚至不会是一个有效的枚举器。即便如此,您也应该检查OpenGL错误,因为这会给您带来错误。
您要查找的内部格式是GL_R8
,像素传输格式将是GL_RED
。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 列表视图更改选择颜色
- GtkTreeView 交替行颜色
- dx11 渲染到纹理仅显示透明颜色
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 为什么我的 LEGACY OPENGL 颜色反转了?
- 双击更改 mfc 中列表控件中的行的颜色
- Visual Studio 19-17 库兼容性根据 GL 标志
- 更改 QT 中按钮的颜色
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 列表视图项的替代颜色
- GLSL 将 uint 转换为浮点颜色
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 如何将矢量对象更改为不同的颜色?
- 无法正确禁用 GL 颜色材质