在学习了教程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
渲染时,将对象的像素颜色与当前屏幕的对应像素颜色相加,结果是有了变亮的效果。
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上图像,但是在这个不规则的空间内就显得……