【问题标题】:SDL layered rendering systemSDL 分层渲染系统
【发布时间】:2018-07-01 07:57:32
【问题描述】:

我想帮助我在 SDL2 中构建分层渲染系统。

我有一个包含巴黎地图及其道路的第一层。 我需要在这张地图上的两点之间画一条线——当这条线的前状态没有消失时,就会出现问题。

我需要在地图上画出这条线并保留它。

我如何制作一个系统来保存地图状态而不绘制任何重叠线,这样我就可以逐帧显示地图,并在其上覆盖线的新状态?

【问题讨论】:

  • 缓冲。将每个图层渲染到其自己的缓冲区,然后将缓冲区blit 到最终渲染表面,保留透明度并可能使用替代混合模式。如果存在于可用硬件中,您可以利用 2D 滚动的优化(不过我不熟悉 SDL API)。
  • 使用 2 个纹理,一个用于地图,另一个用于线条绘制。使用 SDL_SetRenderTarget 渲染到这些纹理,然后将最终的纹理绘制到您的窗口中。

标签: sdl sdl-2


【解决方案1】:

解决了,下面是一个例子!!谢谢大家

SDL_Window *window; 
SDL_Renderer *render;
SDL_Texture *map; //map texture (my layer)

window = SDL_CreateWindow("Test window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
map = SDL_CreateTexture(render,  SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 640, 480); //Creating a texture

/*Map is a red background stored in map texture*/
SDL_SetRenderDrawColor(render, 255, 0, 0, 255);
SDL_SetRenderTarget(render, map);
SDL_RenderClear(render);
SDL_SetRenderTarget(render, NULL);

/*Seting the line color*/
SDL_SetRenderDrawColor(render, 0, 255, 0, 255);

/*Coping the map texture to the render and drawing a green line on top of this*/
SDL_RenderCopy(render, map, NULL, NULL);
SDL_RenderDrawLine(render, 0, 0, 640, 480);
SDL_RenderPresent(render);
SDL_Delay(2000);

/*Another line*/
SDL_RenderCopy(render, map, NULL, NULL);
SDL_RenderDrawLine(render, 0, 480, 640, 0);
SDL_RenderPresent(render);
SDL_Delay(2000);

SDL_DestroyWindow(window);
SDL_DestroyRenderer(render);
SDL_Quit();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2010-11-04
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2014-07-02
    相关资源
    最近更新 更多