原代码在:http://www.cleoag.ru/labs/flex/paperterrain/srcview/
我修改了一点代码让它可以运行在PV3D v2.1上,但感觉效果不理想。请大家看看哪里有问题。
效果图见附件
代码如下:
package
{
import com.adobe.viewsource.ViewSource;
import flash.display.*;
import flash.display.Sprite;
import flash.events.*;
import flash.geom.*;
import mx.core.BitmapAsset;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.core.proto.CameraObject3D;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.render.QuadrantRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.BasicView;
import org.papervision3d.view.Viewport3D;
public class TerrainAni extends Sprite
{
private var container : Sprite;
public var view3D : BasicView;
public var camera : CameraObject3D;
public var scene : Scene3D;
public var viewport : Viewport3D;
private var terrain3D : Plane;
private var textureBitmap : BitmapData;
private var heightMap : BitmapData;
private var paletteArray : Array = new Array();
[Embed(source="images/earthGrad.png")]
// [Embed(source="images/marsGrad.jpg")]
private var GradBmp:Class;
public function TerrainAni()
{
//view3D = new BasicView();
view3D = new BasicView(512,512,false,true,CameraType.FREE);//TARGET);
scene = view3D.scene;
camera = view3D.camera;
//TODO 为啥会有破面现象
//view3D.renderer = new QuadrantRenderEngine(QuadrantRenderEngine.QUAD_SPLIT_FILTER);// .CORRECT_Z_FILTER);// . ALL_FILTERS);
viewport = view3D.viewport;
viewport.opaqueBackground = 0x000000;
stage.quality = "MEDIUM";
stage.scaleMode = "noScale";
stage.align="TL";
init3D();
addChild(view3D);
}
private function init3D():void
{
// Create camera
camera.x = 0;
camera.z = -600;
camera.y = 100;
camera.zoom = 10;
camera.focus = 100;
// create heighMaps
var heightMapWidth:Number = 1024;
heightMap = new BitmapData(heightMapWidth,heightMapWidth,false,0);
textureBitmap = heightMap.clone();
var grad:BitmapAsset = BitmapAsset(new GradBmp());
for (var ra:uint = 0;ra<256;ra++)
{
paletteArray[ra] = grad.bitmapData.getPixel(10, 256-ra);
}
// create textures
var textureMaterial:BitmapMaterial = new BitmapMaterial(textureBitmap);
textureMaterial.doubleSided = true;//false;这个设置为true可以消除破面问题
textureMaterial.lineAlpha = 0.1; //如果执行这句可以显示出面的边线,方便查看
// create terrain
terrain3D = new Plane(textureMaterial,512,512,128,128);//32,32);//
scene.addChild(terrain3D,"Terrain");
terrain3D.rotationX = -90;
generateTerrain();
camera.lookAt(terrain3D);
camera.moveBackward(500);
view3D.singleRender();
this.addEventListener(MouseEvent.MOUSE_DOWN, generateTerrain);
}
private function generateTerrain(e:Event = null):void
{
var nw:Number = heightMap.width/(1+Math.random()*5);
var nh:Number = heightMap.width/(1+Math.random()*5);
//heightMap.perlinNoise(nw,nh,2+Math.round(Math.random()*5),Math.random()*1000,false,(Math.random()>.5 ? true : false),4,false);
heightMap.perlinNoise(128,128,2+Math.round(Math.random()*5),Math.random()*1000,false,(Math.random()>.5 ? true : false),4,false);
textureBitmap.paletteMap(heightMap,heightMap.rect,new Point(), paletteArray,paletteArray,paletteArray);
var vertices :Array = terrain3D.geometry.vertices;
var gridX :Number = terrain3D.segmentsW;
var gridY :Number = terrain3D.segmentsH;
var vertexIndex :Number = 0;
var iW :Number = heightMap.width / gridX;
var iH :Number = heightMap.height / gridY;
for( var ix:int = 0; ix < gridX + 1; ix++ )
{
for( var iy:int = 0; iy < gridY+1; iy++ )
{
vertices[vertexIndex].z = -Math.min(255,Math.max(1,heightMap.getPixel(ix*iW,heightMap.height-iy*iH)))/1;
vertexIndex++;
}
}
}
}
}
在Flex新建一个ActionScript工程,直接按web app运行就可以了
- 大小: 177.5 KB
- 大小: 13.1 KB
分享到:
相关推荐
通过Cesium Terrain Builder生成的地形瓦片,Cesium能够实时渲染出逼真的3D地形,提供平滑的地形过渡效果和高效的性能。 6. **使用流程**:使用CTB工具,用户首先需要准备tif文件,然后通过工具将其转换为Cesium的...
综上所述,这个“生成terrain地形数据-程序及说明”提供了生成Cesium兼容地形数据的解决方案,对于需要在Web平台上创建3D地形模型的开发者来说,这是一个非常有价值的工具。通过学习和使用这个程序,用户不仅可以...
总结起来,WorldComposer是Unity3D开发中的一款利器,它通过强大的地形生成和编辑功能,让开发者能够轻松创建出真实世界般的3D环境。对于希望构建真实感强烈的游戏场景的开发者来说,WorldComposer无疑是一个值得...
本项目涉及的是如何将数字高程模型(Digital Elevation Model,简称DEM)的地形tif文件转换为Cesium可使用的离线terrain地形数据。 首先,你需要安装必要的软件和库。以下是压缩包中的文件及其用途: 1. **T1-...
本篇文章将详细探讨如何利用Python生成terrain地形数据,并结合Cesium进行加载。 首先,地形数据通常以多种格式存在,如TIFF(Tagged Image File Format)图像,它是一种广泛用于地理空间数据的格式。TIFF文件包含...
地图切片转换, 将此目录的文件夹0和layer.json文件拷贝覆盖至生成的terrain_tiles文件夹中 说明:默认未生成\0\0\0.terrain文件,如果不存在此文件加载时地球会只显示半边。
在3D游戏和虚拟现实应用中,真实感的地形生成是至关重要的。3D地形不仅要求视觉上的逼真,还需要考虑到地形的物理特性,如高度、坡度、纹理和地理特征等。 Andre LaMothe在书中深入浅出地介绍了如何利用计算机图形学...
通过这个"terrain地形生成ctb.rar"资源,用户可以学习如何将标准的GIS数据转化为Cesium所需的3D地形,这对于创建交互式地图、模拟飞行、地理分析等多种应用具有重要意义。同时,掌握这一技能也有助于理解GIS数据的...
通过这个压缩包中的"生成terrain地形数据-程序及说明"文档,你应该能找到详尽的操作步骤和注意事项,这将帮助你顺利地完成地形数据的转换和集成工作。确保仔细阅读和遵循每一步,以便在Cesium中成功地展示和利用离线...
在这个“Unity游戏项目源码 强大的地形生成 完整版”压缩包中,你将找到一个实现复杂地形生成功能的完整Unity游戏项目。这个项目不仅对初学者了解Unity的工作原理大有裨益,对于经验丰富的开发者来说也是一个学习新...
在本项目中,我们将探讨如何使用Python将.tif高程数据转换为适用于Cesium的terrain格式,以便在Web上创建交互式3D地形。 首先,`.tif`文件是一种常见的栅格地理数据格式,它由地理空间信息和图像数据组成,通常包含...
在本资源中,我们关注的是“Terrain Composer 2 v2.7”,这是一个专门用于Unity的强大地形生成工具。这个插件极大地扩展了Unity的内置地形系统,让开发者能够更高效、更具创意地构建游戏世界的地貌。 地形生成在...
用于将使用3dmax,Terragen或任何其他编辑器创建的3D地形模型快速转换为Unity Terrain的组件。 特征: •支持Unity v5.2 - Unity 2018.x •组件中使用的模型和地形数量无限; •地形在网格的相同位置创建; •将模型的...
DirectX是一种由微软开发的...通过学习和分析这些源代码,开发者可以深入理解DirectX在3D图形渲染,特别是地形生成方面的应用。同时,这也是一个很好的实践平台,可以帮助开发者提升在游戏开发中的DirectX技术能力。
Real World Terrain 4.0.2是一款专为此目的设计的插件,它允许开发者根据实际地球上的经纬度坐标来生成精确的地形模型。这个插件通过结合卫星数据和GIS(地理信息系统)信息,提供了对现实世界地理特征的高精度再现...
在本项目中,“unity3D地形编辑-Terrain做的地形的运行程序”是一个利用Unity3D的内置地形系统(Terrain)创建并运行的场景。地形编辑是Unity3D中的一个重要组成部分,它允许开发者构建复杂且生动的自然环境,如山脉...
3dmax地形插件,非常好用插件
1. **地形生成与编辑**:Real World Terrain 4.2.1的一大亮点在于其高度自定义的地形生成机制。用户可以通过导入高程数据,结合自身的创意,生成具有丰富细节和真实感的地形。插件内置的编辑工具允许开发者调整地形...
这些数据可以通过算法处理,如LOD(层次细节)技术,生成不同级别的地形细节,以实现高效渲染。 4. **纹理映射**:为了使地形看起来更真实,需要应用纹理,如草地、山石、水体等。多层纹理混合、地形法线贴图和遮罩...
除了基本的地形生成,该插件还允许用户在地形上添加额外的元素,例如建筑物、道路、树木和其他标识物。这些元素可以增强地图的视觉表现力,使其更具真实感。用户可以调整这些对象的位置、大小、形状,甚至可以应用...