我想在SDL2(SDL_RenderCopy)中使用纹理重复,并且无法找到方法。 通过纹理重复我的意思是给出两倍于纹理大小的纹理坐标,并在表面上平铺两次。像这样:http://www.felixgers.de/teaching/jogl/textureClamp.html
任何人都知道如何在SDL中做到这一点?我自己需要访问openGL函数吗?
感谢,
答案 0 :(得分:2)
这不是一个理想的解决方案,但如果您不想沿着使用OpenGL功能的路线前进:
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, DEFAULT_TEXTURE_WRAP );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, DEFAULT_TEXTURE_WRAP );
然后,您可以在绘制时动态计算源和目标。例如,假设您的纹理为100x100,屏幕绘制区域为150x150。从左上角开始,您会看到第一次调用时可以适应完整的纹理
SDL_Rect dest = {0,0,100,100}
SDL_RenderCopy(renderer, texture, NULL, &dest);
---------
| | |
| | |
------ |
| |
---------
所以现在你可以看到你必须只绘制50像素宽的纹理,但仍然是整个高度并从点100,0开始
SDL_Rect src = {0,0,50,100}
SDL_Rect dest = {100,0,50,100}
SDL_RenderCopy(renderer, texture, &src, &dest);
---------
| | |
| | |
--------|
| |
---------
您可以将其用于迭代并整理计算以使其适合您。正如我所说,它不是理想的,但它是另一种选择。