javascript – 在画布中伪造3d球体
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在画布中伪造3d球体,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1961字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 在画布中伪造3d球体](/upload/InfoBanner/zyjiaocheng/721/176b610bb97d4d1f9955be914367c8a6.jpg)
我有一个关于在HTML5 / Canvas / Javascript中伪造3D的问题…
基本上,我在< canvas>上绘制了一个2D图像.使用drawImage().
我想做的是绘制图像,然后将球体上的纹理移动到……球体状……
为清晰起见,请参见下图:
有任何想法吗?
我已经用谷歌搜索了自己近乎死亡,也不能是WebGL,因为它必须在手机上工作……有没有办法做到这一点?
解决方法:
你可以在这里检查一个工作原型:http://jsbin.com/ipaliq/edit
我敢打赌,优化和更好/更快算法的空间很大,但我希望这个概念证明可以指出你正确的方向.
基本算法遍历原始图像的每个像素,并且如果它受到球形变形的影响则计算其新位置.
这是结果:
码:
var w = 150, h = 150;
var canvas=document.getElementById("myCanvas");
var ctx=canvas.getContext("2d");
ctx.fillStyle="red";
ctx.fillRect(0,0,w,h);
//-- Init Canvas
var initCanvas = function()
{
var imgData=ctx.getImageData(0,0,w,h);
for (i=0; i<imgData.width*imgData.height*4;i+=4)
{
imgData.data[i]=i%150*1.5;
imgData.data[i+1]=i%150*1.5;
imgData.data[i+2]=(i/imgData.width)%150*1.5;
imgData.data[i+3]=255;
}
ctx.putImageData(imgData,0,0);
};
initCanvas();
var doSpherize = function()
{
var refractionIndex = 0.5; // [0..1]
//refraction index of the sphere
var radius = 75;
var radius2 = radius * radius;
var centerX = 75;
var centerY = 75;
//center of the sphere
var origX = 0;
var origY = 0;
for (x=0; x<w;x+=1)
for (y=0; y<h;y+=1)
{
var distX = x - centerX;
var distY = y - centerY;
var r2 = distX * distX + distY * distY;
origX = x;
origY = y;
if ( r2 > 0.0 && r2 < radius2 )
{
// distance
var z2 = radius2 - r2;
var z = Math.sqrt(z2);
// refraction
var xa = Math.asin( distX / Math.sqrt( distX * distX + z2 ) );
var xb = xa - xa * refractionIndex;
var ya = Math.asin( distY / Math.sqrt( distY * distY + z2 ) );
var yb = ya - ya * refractionIndex;
// displacement
origX = origX - z * Math.tan( xb );
origY = origY - z * Math.tan( yb );
}
// read
var imgData=ctx.getImageData(origX,origY,1,1);
// write
ctx.putImageData(imgData,x+w,y+h);
}
};
doSpherize();
注意
我会再次建议这样一个强烈的操作,由没有webGL像素着色器的前端传递.这些都是非常优化的,并将能够利用GPU加速.
内容总结
以上是互联网集市为您收集整理的javascript – 在画布中伪造3d球体全部内容,希望文章能够帮你解决javascript – 在画布中伪造3d球体所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。