WebGL-14.截屏操作

本文详细介绍了如何使用JavaScript在WebGL项目中获取渲染数据,然后通过PHP后台处理并将其转换为图片文件。教程针对有一定编程和几何知识的初中三年级及以上学生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列教程主要讲解利用WebGL开发网页版的三维图形程序。这里主要用到的OpenGL和FlyMath内容。本系列内容较难。要求学生对几何和编程有一定的了解。建议初三以上同学学习。

我们会遇到一种情况,渲染好一个场景后,想把他截图下来保存。如何把WebGL的渲染图保存成图片呢。有人会说,右键->图片另存。这是手动方法,我们讲的是要自动方法。比如:渲染一个3D场景,直接保存成图片。

要将渲染效果保存成图片,光靠Javascript不行,还要靠后台程序支持。后台程序一般用PHP。前台负责采集渲染数据传给后台。后台php负责把数据整理保存成图片。


JavaScript采集渲染数据代码

var canvas = document.getElementById('map_canvas');
var w = canvas.width;
var h = canvas.height;
var n=0;
            
var idata = new Uint8Array(4*w*h);
    
gl.readPixels(0,0,w,h,gl.RGBA,gl.UNSIGNED_BYTE,idata);
    
/*readPixels读取像素需要一些时间,为了保证读完再执行下面程序,
  这里可加一些等待界面。等待1~2秒再往下执行。
*/
show_wait();
    
var img_data="imgdata="+JSON.stringify(idata);
    
$.ajax({
        type:"POST",
        url:"saveimg.php?width="+w+"&height="+h,
        data:img_data,
        success:function(retval)
        {
            if(retval!="-1")
            {
               alert("保存图片成功");
            }
            else
            {
               alert("保存图片失败,稍后再试!");
            }
        },
});

PHP把数据转换成图片代码

$_img = imagecreatetruecolor(400,200);
$_black = imagecolorallocate($_img,0,0,0);
imagefill($_img,0,0,$_black); 
$idata = json_decode($_POST["imgdata"]);
$i=0;
$w = $_GET["width"];
$h = $_GET["height"];
    
for($y=h;$y>0;$y--)
{
     for($x=0;$x<w;$x++)
     {
         $r = $idata[$i++];
         $g = $idata[$i++];
         $b = $idata[$i++];
         //注意这里我故意跳开了Alpha值
         $i++;
         $color = imagecolorallocate($_img,$r,$g,$b);
         imagesetpixel($_img, $x, $y, $color);
     }
}
    
imagepng($_img,"./temp.png");
imagedestroy($_img);
    
echo '1';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun zi chao

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值