papervision3d学习笔记:卷轴-清明上河图

本文介绍了一种将二维图像转化为3D卷轴的方法,通过将《清明上河图》拆分为多个片段并利用PV3D进行三维重建,实现了图像的圆柱形展示效果。文中还探讨了交互式控制视角的技术细节。

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

 

   ( 本来很想尝试csdn 上传图片,可是发现今天csdn 上传图片已经超出了20m,图片很麻烦)

 

   今天,将之前的东西改写了一下发现有很多趣味的地方。没想到原来还可以这样子。将一张清明上河图的平面卷成这种圆柱的形状。

在卷的时候,是怎样将图片卷成圆柱形状?其实采用办法个人比较笨拙一点,但是实现起来会很简单。

 基本过程是将图片进行拆片,

我们加载一张图片之后,通过位图复制的办法,按等分的办法将其分割一块块,然后利用这些碎片,就可以根据我们的喜好来组合拼的办法,这样看起来一张清明上河图就变成了卷轴的形状了。至于怎样算每一个角度偏移?这里又会涉及到圆的计算办法。利用三角函数计算出来 。有兴趣可以尝试一下。

 

 当中里面使用pv3d 两种交互办法,这种交互过程是在一本pv3d教程当中提取出来。里面有距离检测法,和通过鼠标让摄影机移动的交互办法。很实用的技巧。 

距离检测法:鼠标向中心点位置靠近,在这个距离当中鼠标的mouseX和mouseY会产生变化值,这样一来他们向中心点的连线距离就会产生一个变化值

摄影机移动:通过移动摄影机的x和y,z的空间坐标值,从而让视角产生不同的变化。

 代码清单:

 package { import flash.events.Event; import flash.events.MouseEvent; import flash.display.*; import flash.net.*; import flash.geom.*; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.view.BasicView; import org.papervision3d.materials.BitmapMaterial; public class Main extends BasicView { private var grid:DisplayObject3D; private var shapeList:Array=[]; private var image_width:Number = 0;//一张图片宽度 private var image_height:Number = 0;//一张图片宽度 private var easeOut:Number = 0.3; private var reachX:Number = 0.5; private var reachY:Number = 0.5; private var reachZ:Number = 0.05; public function Main() { stage.frameRate = 40; init(); startRendering(); } private function init():void { this.camera.z=500; grid = new DisplayObject3D(); scene.addChild(grid); loadImage("1.jpg"); } //加载图片 private function loadImage(url:String):void { var loader:Loader=new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadImageComplete); loader.load(new URLRequest(url)); } private function onLoadImageComplete(event:Event):void { event.currentTarget.removeEventListener(Event.COMPLETE,onLoadImageComplete); var bitmapData:BitmapData = Bitmap(event.currentTarget.content).bitmapData; creatSprite(bitmapData,24,"x"); bitmapData.dispose(); } //创建一组图形 private function creatSprite(bitmapData:BitmapData,n:int,direction:String="x"):void { var width:Number; var height:Number; if (direction == "x") { width = bitmapData.width / n;//图片宽度 height = bitmapData.height; image_width = width; } if (direction == "y") { width = bitmapData.width;//图片宽度 height = bitmapData.height / n; image_height = height; } for (var i:int=0; i<n; i++) { var bmpData:BitmapData = new BitmapData(width,height); var tempX:Number = direction == "x" ? width:0; var tempY:Number = direction == "x" ? 0:height; bmpData.copyPixels(bitmapData,new Rectangle(i*tempX,i*tempY,width,height),new Point(0,0)); var material:BitmapMaterial=new BitmapMaterial(bmpData);//位图材质 material.oneSide=false; var plane:Plane=new Plane(material,width,height); grid.addChild(plane); shapeList.push(plane); } render(shapeList,image_width); } //构建这种图 private function render(array:Array,rad:Number):void { var len:int = array.length; var angle:Number = 360 / len; rad = rad * 0.5 / Math.sin(angle * 0.5 * Math.PI / 180);//算出半径 for (var i:int=0; i<len; i++) { array[i].x = Math.cos(i * angle * Math.PI / 180) * rad; array[i].z = Math.sin(i * angle * Math.PI / 180) * rad; array[i].rotationY = - i * angle + 270;//偏移角度 } } override protected function onRenderTick(e:Event=null):void { //距离检测 var xDist:Number = mouseX - stage.stageWidth * 0.5; var yDist:Number = mouseY - stage.stageHeight * 0.5; //给摄影机添加缓冲效果 camera.x += (xDist - camera.x * reachX) * easeOut; camera.y += (yDist- camera.y * reachY) * easeOut; camera.z += (-mouseY * 2 - camera.z ) * reachZ; super.onRenderTick();//渲染 } } }

电动汽车数据集 该综合数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕获了技术规格、性能、定价、制造原产地、销售和安全相关属性。每一行代表由Vehicle_ID标识的唯一车辆列表。 主要特征 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨越多个年份(旧版和即将推出的)。 数据质量说明: 某些行的某些字段可能缺失(空白)。 多个分类字段包含不同的特定于供应商的值(例如,Charging_Type、Battery_Type)。 单位在列之间混合;注意千瓦时、公里、小时、美元、克/公里和额定等级。 列 Vehicle_ID 每个车辆记录的唯一标识符。 制造者 车辆品牌或 OEM。 型 年 Battery_Type 使用的电池化学/技术 Battery_Capacity_kWh 标称电池容量(以千瓦时为单位)。 Range_km 充满电后声称的行驶里程(公里)。 Charging_Type 主要的充电接口或功能。 Charge_Time_hr 大致充电时间(小时),上下文因充电方法而异 Price_USD 以美元为单位的指示性车辆价格。 颜色 Country_of_Manufacture 车辆制造/组装的国家/地区。 Autonomous_Level 自动化能力级别(例如,0-5),可能包括子级别的小数。 CO2_Emissions_g_per_km 尾气二氧化碳排放量(以克/公里为单位)(纯电动汽车通常为 0) Safety_Rating 安全等级 Units_Sold_2024 在 2024 年售出的单位 Warranty_Years 保修期(以年为单位)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值