如果我使用碎片着色器绘制纹理,如何绘制红线
How to draw red lines if I used a fragment shader for texture?
我正在使用opengl编写一个简单的视频播放器。我使用了Qt,并遵循了它的基本纹理示例。顶点和片段着色器在这里:
QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
const char *vsrc =
"attribute highp vec4 vertex;n"
"attribute mediump vec4 texCoord;n"
"varying mediump vec4 texc;n"
"uniform mediump mat4 matrix;n"
"void main(void)n"
"{n"
" gl_Position = matrix * vertex;n"
" texc = texCoord;n"
"}n";
vshader->compileSourceCode(vsrc);
QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this);
const char *fsrc =
"uniform sampler2D texture;n"
"varying mediump vec4 texc;n"
"void main(void)n"
"{n"
" gl_FragColor = texture2D(texture, texc.st);n"
"}n";
fshader->compileSourceCode(fsrc);
我这样做是为了显示一个图像:
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture_cv.cols, texture_cv.rows, GL_RGB, GL_UNSIGNED_BYTE, texture_cv.data);
//then draw a quad
...
然后,在这之后,我如何在屏幕上画几条红线,因为我使用的是碎片着色器(我对着色器很陌生),我无法关闭纹理。
到目前为止,最简单的解决方案是使用不同的着色器程序来绘制红线。由于它只是画一个纯色,它将是非常容易的。碎片着色器可能类似于:
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
顶点着色器与现有着色器非常相似,只是它不需要生成纹理坐标。您甚至可以使用现有的顶点着色器。
使用多个着色器程序进行渲染是非常常见的。每个不同类型的渲染都有一个着色器程序,并使用glUseProgram()
在它们之间切换。
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 绘制文本问题
- 在 QT C++中绘制/操作多边形
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 通过 GdkPixbuf 绘制时会绘制错误的像素坐标
- 使用绘制轮廓绘制点的序列
- cocos2dx c++如何用鼠标触控绘制线条(绘制元素)