- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四边形是一种图元.doc
渲染:
在 HGE 中,四边形是一种图元,对应了结构体 hgeQuad,另外还有三角形图元,对应 hgeTriple,为了渲染,我们现在需要使用 hgeQuad 结构体,这个结构体如下:
struct hgeQuad{? hgeVertex? v[4];?? // 顶点描述了这个四边形? HTEXTURE?? tex;?? // 纹理的句柄或者为0? int??????? blend;?? // 混合模式(blending mode)};
HGE 中图元对应的结构体总含有这3个部分:顶点,纹理句柄,混合模式
struct hgeVertex
{
??? float x, y;?? // 屏幕的 x,y 坐标
??? float z;?? // Z-order,范围 [0, 1]
??? DWORD col;?? // 顶点的颜色
??? float tx, ty;?? // 纹理的 x,y 坐标(赋值前需要规格化坐标间隔,使得 tx,ty 取值范围在[0,1])
};
规格化坐标间隔在后面的例子中会谈到
?
1. 颜色的表示:
颜色使用32位表示,从左开始,8位为 Alpha 通道,8位红色,8位绿色,8位蓝色
对于后24位,如果全部为0,表示黑色,如果全部为1,表示白色
?
2. 定义颜色的运算:
我们把颜色看成一个四维向量,即 alpha 通道,红色,绿色,蓝色这四个分量
??? 1 颜色是可以相乘的
??? 颜色的相乘是对应的四个分量分别相乘的结果,即:alpha 通道的值与 alpha 通道的值相乘,红色的值与红色的值相乘,绿色的值与绿色的值相乘,蓝色的值与蓝色的值相乘。
??? 2 颜色是可以相加的
??? 同上,对应分量相加。
颜色的每个分量使用浮点数表示,范围是[0-1],相加操作可能导致溢出,一种处理的方式就是,如果溢出,则设定值为1。
?
3. 混合模式:
1)BLEND_COLORADD
表示顶点的颜色与纹理的纹元(texel)颜色相加,这使得纹理变亮,可见顶点颜色为 0将不造成任何影响。
2)BLEND_COLORMUL
表示顶点的颜色与纹理的纹元颜色相乘,这使得纹理变暗,可见顶点颜色为 0xFFFFFFFF 将不造成任何影响。
注意:必须在1),2)中做一个选择,且只能选择1),2)中的一个。处理的对象是纹理颜色和顶点颜色。
这里有一个技巧:
如果我们需要在程序中显示一个气球,这个气球的颜色不断变化,这时候我们并不需要准备多张不同颜色的气球纹理,而只需要一张白色的气球纹理,设置 blend 为 BLEND_COLORMUL,白色的R,G,B值被表示成 1.0,也就是说,纹理颜色和顶点颜色相乘的结果是顶点的颜色,那么就可以通过修改顶点颜色,得到任意颜色的气球了。
3)BLEND_ALPHABLEND
渲染时,将对象的像素颜色(而非顶点的颜色)与当前屏幕的对应像素颜色进行 alpha 混合。alpha 混合使用到 alpha 通道,对于两个像素颜色进行如下操作,得到一个颜色:
R(C)=alpha*R(B)+(1-alpha)*R(A)G(C)=alpha*G(B)+(1-alpha)*G(A)B(C)=alpha*B(B)+(1-alpha)*B(A)
这里的BLEND_ALPHABLEND使用的是对象像素的颜色的 alpha 通道。可见如果对象像素颜色 alpha 通道为 0,那么结果就是只有当前屏幕的像素颜色,也就是常常说的 100% 透明,因此,我们可以理解 alpha 混合就是一个是图像透明的操作,0 表示完全透明,255 表示完全不透明。
4)BLEND_ALPHAADD
渲染时,将对象的像素颜色与当前屏幕的对应像素颜色相加,结果是有了变亮的效果。
注意:这里的3),4)必选其一,且只能选其一。处理的对象是对象像素颜色和屏幕像素颜色。
5)BLEND_ZWRITE
渲染时,写像素的 Z-order 到 Z-buffer
6)BLEND_NOZWRITE
渲染时,不写像素的 Z-order 到 Z-buffer
这里一样是二者选一
设置举例:
quad.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_ZWRITE;?? // quad 为 hgeQuad 变量
?
4. HGE 渲染
1)定义和初始化 hgeQuad 结构体:
hgeQuad quad;?? // 定义四边形
2)初始化 hgeQuad 变量:
// 设置混合模式
quad.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_ZWRITE;
// 加载纹理
quad.tex = pHGE-Texture_Load(
文档评论(0)