扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
图1.GL-117中的一个视图 |
#include "Tunnel.h" // SDL 相关变量定义 SDL_Surface *screen,*bBuffer,*Image; SDL_Rect rScreen,rBuffer; int main (int argc, char **argv) { int flag = SDL_SWSURFACE;// 请求一个软件表面. //软件表面处于系统内存中, // 一般不如硬件表面速度快 #ifdef WIN32 int fullscreen = MessageBox(NULL, "Show Full Screen (y/n):","Screen Setting", MB_YESNO); if (fullscreen==IDYES) { flag |= SDL_FULLSCREEN; // 如果用户需要,接管整个屏幕 } #endif Tunnel_Timer(); // 读取起始的系统时钟值 SDL_Init( SDL_INIT_VIDEO ); // 初始化视频子系统 //把屏幕设置到 320x240,32位颜色 screen = SDL_SetVideoMode( 320, 240, 32, flag); // 如果可用的话,为屏幕表面请求硬件缓冲 bBuffer = SDL_CreateRGBSurface( SDL_HWSURFACE, screen->w,screen->h,screen->format->BitsPerPixel, screen->format->Rmask, screen->format->Gmask, screen->format->Bmask, screen->format->Amask); // 这是种子图像,一旦开始它就会盘旋起来 Image = SDL_LoadBMP( "tunnel_map.bmp" ); Image = SDL_ConvertSurface(Image, screen->format, SDL_HWSURFACE); rBuffer.x = 0; rBuffer.y = 0; rBuffer.w = bBuffer->w; rBuffer.h = bBuffer->h; // 忽视大多数事件, 包括 鼠标动作, 并取消光标 SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE); SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE); SDL_ShowCursor( SDL_DISABLE ); Tunnel.Set( 320, 240 ); // 通道将填充整个的缓冲区 Tunnel.Precalc( 16 ); //内部的圆圈直径 while (SDL_PollEvent(NULL)==0) { float fTime = Tunnel_GetTime(); //在修改前,必须锁定表面,特别当缓冲区处于图形硬件内存中时 SDL_LockSurface(bBuffer); SDL_LockSurface(Image); Tunnel.Draw(bBuffer, Image, 180*sin(fTime), fTime*100); SDL_UnlockSurface(bBuffer); // 在更新以后你可以开锁 SDL_UnlockSurface(Image); // 把缓冲区中的数据输出到屏幕绘图区域并强迫进行重画 SDL_BlitSurface( bBuffer, NULL, screen, &rBuffer ); SDL_UpdateRect( screen, 0, 0, 0, 0 ); } Tunnel.Free(); } |
图 2. 演示旋转和扭曲的2D通道 |
图3.酷毙的Zaxxon的重制品 |
图4.在Irrlicht中的一个十分逼真的场景 |
图5.XenoHammer屏幕快照 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者