2、在用CC++创建的窗口中,定义像素缓冲区,自己写渲染器显示图形

    技术2022-07-11  138

    主要目的:

    自己写一个渲染器(renderer),就是做一个自己的像素缓冲区(Buffer),以此可以渲染(rende)任何自己写的东西。然后把这个渲染过后的位图给windows系统用,就会把它展示在自己创建的窗口中,

    题外话:现存的所有渲染都是依赖3d 显卡,在很久以前,你必须写一个renderer,因为显卡不能帮你做。render的原理是,你写东西到buffer里面,然后告诉graphic card,这个Buffer是你需要去display的,这就是学习(图形渲染)rendering的第一步。

    gdi是windows 的图形API,因此这次的设计将会与gdi进行交互,用gdi去绘图。 画一些自定义的东西,必须自己去渲染位图。所以,这次需要做的是让Windows分配一个存储位图的Buffer,去取一个我们已经渲染过的位图(bitmap),并且用我们自己的代码把它display on windows系统上。

    实现功能的思路如下:

    1、在回调函数中,处理WM_Size事件(窗口大小改变),如果改变,则用个函数去Resize它,保证渲染的图形不会随之改变。 2、在回调函数中,处理WM_Paint事件(画图),先在这里面创建一个Buffer,每次Windows需要repaint,就会把Buffer内容加载到窗口。具体实现上,用BeginPaint告诉系统要占用显卡了,显示后就可以用函数UpdateWindow()去画画。 3、在ResizeDIBSection中创建Buffer,做两件事情,一是创建位图,二是渲染好这个位图的像素。

    位图BitMap定义:

    typedef struct tagBITMAP { // bm LONG bmType; //位图类型 LONG bmWidth; //以像素表示的位图宽度 LONG bmHeight; //以像素表示的位图高度 LONG bmWidthBytes; //每条扫描线的字节数 WORD bmPlanes; //在位图中的颜色面数 WORD bmBitsPixel; //描述像素颜色所需位数 LPVOID bmBits; //指向构成图像数据的字符值数组的指针 } BITMAP;

    位图,又称为点阵图像、像素图或栅格图像,是由像素(图片元素)的单个点组成。这些点可以进行不同的排列和染色以构成图样。位图的单位:像素(Pixel) 位图的文件类型很多,如:.bmp、.pcx、.gif、.jpg、*.tif *.psd、kodak photo *.pcd、corel photo *.cpt 引文地址:位图 定义及解释

    需要用到OS中的很多东西,如下

    函数: ResizeDIBSection(); 让windows系统用来识别你写的位图,并进行显示; 基本工作是每次在回调函数中收到WN_SIZE(调整窗口大小)的消息时,我们就会call这个ResizeDIBSection。 但是,本次是2D游戏开发,必须要固定分辨率进行渲染,所以 终极目的是为渲染选择合理的尺寸,大致对应窗口的大小就行; 在里面用windows接口写Buffer GetClientRect(); 得到整个窗口中能绘画的窗口大小,只是给a part of 窗口让我们绘画。 比如,打开记事本txt,会有边框,只有白色是我们能绘画的,边框是由windows系统绘画。 CreateDIBSection(); 让windows系统创建位图。 StretchDIBits(); 这是传入一个rectangle,输出也是rectangle,相当于复制了一个。 其中有2个参数是控制这个函数功能的,分别是 UINT iUsage, DWORD rop, 第一个告诉是什么类型picture,什么类型的Buffer,有两个该参数的选项,一个是palette,一个是RGB(每个像素都携带RGB)。本次采用RGB写入到Buffer。 第二个是raster operation 光栅操作符:光栅操作码定义了GDI如何将当前画刷颜色、源位图颜色和目标位图颜色组合形成新的颜色。本次选择的参数只会对当前的源rectangle复制到目的矩形。

    设备独立位图:Device Independent Bitmap=DIB DeviceContext是用来在Windows上进行绘图draw的,相当于画布。

    不依赖于具体的设备,更适合在不同的计算机之间传输和显示。 它包含一个颜色表,颜色表描述像素值如何对应于RGB颜色值,其描述通过发光产生的颜色。因此,DIB可以在任何设备上实现适当的配色方案。 DIB包含以下颜色和尺寸信息: 创建矩形图像的设备的颜色格式。 创建矩形图像的设备的分辨率。 创建图像的设备的调色板。 将红,绿,蓝(RGB)三元组映射到矩形图像中的像素的位阵列。 一个数据压缩标识符,指示用于减少位阵列大小的数据压缩方案(如果有的话)。 原文地址

    Processed: 0.010, SQL: 9