HGE tutorial02 plus

在学习了教程2之后,前面我有一个问题:blend

这里有前辈的一个博客:http://www.cppblog.com/WhiteDummy/archive/2012/12/13/196205.aspx

允许我引用下前辈提到的blend的值:

1)BLEND_COLORADD

表示顶点的颜色与纹理的纹元(texel)颜色相加,这使得纹理变亮,可见顶点颜色为 0x00000000,将不造成任何影响。

2)BLEND_COLORMUL

表示顶点的颜色与纹理的纹元颜色相乘,这使得纹理变暗,可见顶点颜色为 0xFFFFFFFF 将不造成任何影响。


3)BLEND_ALPHABLEND

渲染时,将对象的像素颜色(而非顶点的颜色)与当前屏幕的对应像素颜色进行 alpha 混合。

4)BLEND_ALPHAADD

渲染时,将对象的像素颜色与当前屏幕的对应像素颜色相加,结果是有了变亮的效果。

5)BLEND_ZWRITE
写像素的 Z-order 到 Z-buffer

6)BLEND_NOZWRITE

渲染时,不写像素的 Z-order 到 Z-buffer

以上1和2,3和4,5和6都是互斥的,并且必须选择一个的,默认情况下应该是2,3,6

在这里我给自己的原来修改过的程序放上了一个背景图→_→其实就是加一个quad,然后将这个quad作为背景了。

在原来程序中我们使用的组合是:2,4,6。也就是说当两张图叠加在一起的时候,我们是:纹理变暗;渲染时会变亮;不写像素Z-order到Z-buffer。

注意:System_SetState时要让 HGE_ZBUFFER 为 TRUE。否则所有的z值都会被忽略。

对于其中的组合,下次找个时间来试试所有的组合。话说已经尝试了一些,但是改变组合至少我没发现有多少的变化。

在这个教程中,我们还学到了quad.我来看下他的结构,虽然前面看过前辈的介绍,但是还是要自己去了解下。

struct hgeQuad
{
    hgeVertex        v[4];     //顶点
    HTEXTURE         tex;      //纹理
    int              blend;    //混色
};

struct hgeVertex
{
    float x, y;            //窗口内坐标
    float z;               //z-buffer
    DWORD col;             //颜色
    float tx, ty;          //纹理上的相对位置
};

通过数据结构也可以看出来一个quad就是有四个定点组成的一个2D的多边形。在quad的结构中有四个点和一个texture,四个点的作用是将texture上的某四个点的内容渲染到窗口上这四个点的空间内。也就是说我可以在四个很大的空间内渲染原来在texture上很小的内容?答案是:就是这样的。这里可以这样认为吧。可以把texture当作是一个胶片,而quad正式放映机,而窗口就是放映的界面,虽然在texture上的原来较小,但是在窗口上的投影的话就随便自己投多大了。效果图:

  叉开了,这里又有个我不懂的地方:作为每个定点还有颜色?如果我把颜色换成白色或者换成黑色(黑色的话和背景都分不开了吧,喂) 我先将4个定点的颜色都换成了白色;在将四个点的颜色分别换

       

通过两幅图片可以明显的看出来,四个点对于图片的渲染有各自的一部分。具体的渲染过程待解!

这里程序引用的图片是一个png的图片,我们换个别的格式更花哨的图片试试,上图:

不要在意这是什么图→→这是在设置所有顶点的颜色为白色的情况下,当然前面的那种四个顶点不同颜色也是可以的。但是出来的图片就明显太暗了。接下来顺便试试四个顶点构成的不规则四边形:

 

忠实地还原了texture上图像,但是在这个不规则的空间内就显得……

原文地址:https://www.cnblogs.com/yoru/p/4020723.html