【发布时间】:2014-10-06 16:45:17
【问题描述】:
我正在用鼠标在 3D 对象上绘图。
我现在的做法是通过片段着色器将 UV 坐标打包到 RG 像素,如下所示:
in highp vec2 UV;
out vec4 fragColor;
void main()
{
fragColor.r = UV.x;
fragColor.g = UV.y;
}
我将它们渲染到屏幕外 FBO,然后在鼠标下读取像素以获取 CPU 端的 UV 坐标。
float pixel_array[4];
CALL_GL(glReadBuffer(GL_COLOR_ATTACHMENT0));
CALL_GL(glReadPixels(normMouseX*WINDOW_WIDTH,normMouseY*WINDOW_HEIGHT,1,1,GL_RGBA,GL_FLOAT,pixel_array));
float u = pixel_array[0];
float v = pixel_array[1];
然后我使用这些 UV 坐标在正确的位置“绘制”纹理。
CALL_GL(glBindTexture(GL_TEXTURE_2D, mesh.diffuseTexture));
CALL_GL(glTexSubImage2D(GL_TEXTURE_2D,
0,
u*diffuseTextureWidth,
v*diffuseTextureHeight,
5,
5,
GL_RGBA,
GL_UNSIGNED_BYTE,
brush_pixels));
问题在于,根据纹理的分辨率,这个过程非常缓慢。有什么方法可以加快速度吗?
【问题讨论】:
标签: c++ opengl drawing textures