OpenGL中函数glPolygonStipple的探究

 

最近在看文库上流传的《OpenGL入门教程(精)》学习OpenGL,看到(4)镂空多边形 觉得很有趣,好像可以用图片来填充多边形了,就找了张图片,按照书上说的,保存为单色的bimap,

800*500 的单色bitmap

然后用代码把它打开,保存在mask[]中(我这里的图片用的是800*500的,mask数组的长度相应的就为50000)结果填充出来的图案就很奇怪。

很奇怪的图象

附上display()函数的代码段: 

void display()
{
    static GLubyte mask[50000];
    ifstream ifile;
	ifile.open("ting.bmp", ios::binary | ios::in);
	ifile.read((char*)mask, 50000);
	ifile.close();
	glClear(GL_COLOR_BUFFER_BIT);
	glEnable(GL_POLYGON_STIPPLE);
	glPolygonStipple(mask);
	glRectf(-1, -1, 0, 0);
	glDisable(GL_POLYGON_STIPPLE);
	glRectf(0, 0, 1, 1);
	glFlush();
}

想着会不会是图片尺寸太大了,就改小了一点(40*20),把"mask[50000]"改成"mask[100]"走一波。

40*20的单色bitmap,眼睛已经看不清了,有点丑

 

眼睛呢?还是很奇怪的图象

 

还是有问题,那是不是说只可以是32*32的呢?

还用这张图,我尝试了32*32的截法。

32*32的截法,这次还比上次好看一些呢!!

结果有点小惊喜!

但还是有点问题,这眼睛好像只有一半诶,于是我用二进制查看器打开了另一张32*32的单色位图,如下图所示:

二进制编辑器打开单色位图(VS2017)

发现这里和想象的不一样,不只是128byte,而是190byte,但看到最前面那里的“BM”,可能前面62byte是文件的属性信息吧?那传给glPolygonStipple的参数从63开始好了,于是把原来代码中的:

	glPolygonStipple(mask);

替换成了:

	glPolygonStipple(&mask[62]);

运行,成功!

FINALLY!

结合Photoshop就可以做出一些比较好玩的东西:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值