第四課 多個Texture的繪製

2021-06-27 20:42:35 字數 3032 閱讀 1839

上一課我們講解了關於如何用sdl顯示乙個bmp的,其實就是涉及sdl_window,sdl_su***ce,sdl_renderer,sdl_texture,如果在sdl上面顯示幾個呢,也很簡單,也就是用多個sdl_texture繪製在乙個sdl_renderer上,在指定位置以及大小就可以了,下面看一下**的實現:

講解:

const int screen_width = 640;//window視窗寬度

const int screen_height = 480;//window視窗的高度

//sdl_window視窗的銷毀

void clesson03::cleanup(sdl_window* window)

//銷毀renderer,window,texure,原作者寫的這個函式比這個要好,這裡僅僅是為了實現功能。

void clesson03::cleanup(sdl_texture* background, sdl_texture* image, sdl_renderer* renderer, sdl_window* window)

if(image)

if(renderer)

if(window)

}/*這個就是標準的c++輸出功能,sdl_geterror()獲取錯誤碼

*/void clesson03::logsdlerror(std::ostream &os, const std::string &msg)

/* * load乙個bmp檔案,並且返回乙個sdl_texture

* @param file bmp檔案

* @param ren 需要渲染的renderer

* @return 乙個sdl_texture指標或者null.

*/sdl_texture* clesson03::loadtexture(const std::string &file, sdl_renderer *ren)

} else

return texture;}/*

* 繪製texure在renderer指定的位置。

* the texture's width and height

* @param tex 需要在renderer繪製的texture;

* @param ren texture繪製的renderer

* @param x x位置

* @param y y位置

感覺寫的意思很彆扭,文筆不是很好(只可意會,不可言傳)

*/void clesson03::rendertexture(sdl_texture *tex, sdl_renderer *ren, int x, int y)

int clesson03::run(int argc, char** argv)

//建立sdl_window

sdl_window *window = sdl_createwindow("oad工作室-多個bmp顯示", 100, 100, screen_width, screen_height, sdl_window_shown);

if (window == nullptr)

//建立sdl_renderer

sdl_renderer *renderer = sdl_createrenderer(window, -1, sdl_renderer_accelerated | sdl_renderer_presentvsync);

if (renderer == nullptr)

//建立兩個texture,乙個背景,乙個前景

const std::string respath(argv[1]);

sdl_texture *background = loadtexture(respath + "background.bmp", renderer);

sdl_texture *image = loadtexture(respath + "image.bmp", renderer);

//make sure they both loaded ok

if (background == nullptr || image == nullptr)

//clear sdl_window,準備開始繪製

sdl_renderclear(renderer);

//這個函式就是獲取texture的資訊,如果不能理解(你可以認為是bmp的一些資訊,其實這裡已經沒有sureface什麼事了)

int bw, bh;

sdl_querytexture(background, null, null, &bw, &bh);

//在renderer上繪製4個圖,這個演算法肯定是最笨,就簡單的,知道怎麼回事就可以了,必定就是乙個demo

rendertexture(background, renderer, 0, 0);

rendertexture(background, renderer, bw, 0);

rendertexture(background, renderer, 0, bh);

rendertexture(background, renderer, bw, bh);

//這裡繪製前景在中間顯示,**很簡單。

int iw, ih;

sdl_querytexture(image, null, null, &iw, &ih);

int x = screen_width / 2 - iw / 2;

int y = screen_height / 2 - ih / 2;

rendertexture(image, renderer, x, y);

//更新一下renderer

sdl_renderpresent(renderer);

bool brun = true;//程式是否允許

while (brun) }}

cleanup(background, image, renderer, window);

sdl_quit();

return 0;

}第二課:sdl window的建立與顯示,我們修改的**教程完以後會上傳到csdn上。

鋼琴第四課

因為此前每天都練琴,曲譜也都記住了,所以,週六,臨時被老師喊去時,非常自信。學到了很多知識。1.連貫性方面 連貫性要注意 其實,連貫性在於對曲目的熟練程度,手指的靈活程度,還有不同音之間的連貫跳躍 音要連續 不同音,要連續連線在一起 這個音落下,上個音才起來 2.節奏方面 四分音符要短快,彈到了,立...

Android OpenGL教程 第四課

android opengl 教程 第四課旋 在這一課裡,我將教會你如何旋轉三角形和四邊形。左圖中的三角形沿y軸旋轉,四邊形沿著x軸旋轉。我們增加兩個變數來控制這兩個物件的旋轉。這兩個變數加在程式的開始處其他變數的後面。它們是浮點型別的變數,使得我們能夠非常精確地旋轉物件。浮點數包含小數字置,這意味...

Linux基礎 第四課

nfs伺服器設定 安裝sudo apt get install portma 安裝sudo apt get install nfs kernel server 配置檔案etc exports 增加共享的目錄 ip2位址以及許可權 啟動服務 service portmap start 然後啟動服務 s...