3D
文章平均质量分 81
孙群
关注前端HTML5,关注地理数据可视化,热爱移动互联网,爱开源,爱分享!
展开
-
用Balder根据两个三维点创建Cylinder
Balder中自动创建的Cylinder默认是处于垂直状态的,如果想要根据两个三维坐标创建一个圆柱,那么就需要对刚创建的Cylinder进行旋转操作。private Cylinder CreatePipeCylinderFromGraphic(double x1,double y1,double z1,double x2,double y2,double z2,double Radius,原创 2012-06-25 21:56:16 · 2112 阅读 · 0 评论 -
WebGL自学课程(8):WebGL+ArcGIS JS API实现TerrainMap
转载请注明出处以前在Esri的博客上看到了一篇用Silverlight+Balder实现TerrainMap的文章,实现的功能是将指定的二维投影地理范围转换成三维地形图,这是链接地址http://maps.esri.com/sldemos/terrainmap/default.html,感觉很有意思,最近在看WebGL,所以就想用WebGL重新进行实现,其中用ArcGIS JS API获取原创 2012-08-20 03:01:22 · 12988 阅读 · 2 评论 -
OpenGL 矩阵变换相关链接
感觉这几篇文章对OpenGL中的矩阵变化解释的比较好:原创 2014-05-31 07:51:18 · 2506 阅读 · 3 评论 -
WebGL自学课程(13):获得三维拾取向量
一个三维点最终展现在屏幕上要经过很多的矩阵变换,如果要根据屏幕上的2D点获取对应的三维信息,那么就需要对3D到2D转变的操作进行逆操作,我们先来看一下从3D到2D的具体的变换过程是怎么样的。三维中一点要想展现在屏幕上需要经过这么几个重要的变换过程:模型变换->视点变换->投影变换->投影除法。在顶点着色器中我们需要自己手动完成前三个变换过程(模型变换、视点变换、投影变换),如下所示:原创 2013-05-05 13:39:13 · 5087 阅读 · 8 评论 -
OpenGL中的坐标变换、矩阵变换
OpenGL中存在六种坐标系:1. Object or model coordinates(模型坐标系)2. World coordinates(世界坐标系)3. Eye (or Camera) coordinates(视坐标系)4. Clip coordinates(裁剪坐标系)5. Normalized device coordinates(归一化设备坐标系)6. Wi原创 2014-06-01 16:12:33 · 21177 阅读 · 17 评论 -
WebGL+ArcGIS JS API实现Web城市地下管线三维场景浏览
注:转载请注明出处WebGL发展的如火如荼,未来的WebGIS也应该体现3D的趋势,本人的本科毕业论文是《Web城市地下管线三维场景浏览技术研究》,通过ArcGIS JS API获取地理数据,然后用WebGL框架Three.js将该地理数据进行三维展示。本论文主要具有以下创新点:(1)在传统的WebGIS的基础上,借助于主流的IT技术(WebGL)实现了在传统网页中嵌入三维GI原创 2012-06-29 17:31:45 · 40129 阅读 · 33 评论 -
在SceneControl中通过鼠标单击获得三维射线、产生三维的点
我的思路是这样的:在SceneControl的空白处点击,不可能确定一个三维点,应该可以得到无数点,这些点在一条直线上,且与观察点共线,我现在想得到z值为0的那个点,于是我通过SceneControl的单击事件数据e获取屏幕坐标e.x和e.y,然后用DisplayTransformation.ToMapPoint方法将屏幕坐标转换为实际的地图坐标Point,然后给该点的z值赋值0,按说这样就可以通原创 2011-11-08 09:26:48 · 3918 阅读 · 5 评论 -
基于SceneControl的三维GIS开发入门
在ArcGIS体系中,三维开发包括两种:基于Scene的三维开发和基于Globe的三维开发。由上图可以看出,两种开发的接口都很相似,掌握了Scene开发会相对容易的过渡到Globe开发中。正如上图所示,Scene开发常用的接口有IScene、ISceneGraph、ISceneViewer、I3DViewer、ICamera等接口,除此之外IGraphicsLayers3D、I3D原创 2012-02-21 13:08:06 · 8665 阅读 · 1 评论 -
用PV3D在Flex中实现全景360
PV3D采用的是左手坐标系,默认的X正向指向屏幕右侧,Y正向指向屏幕上方,Z正向垂直屏幕向内,下图左侧为左手坐标系,用户默认的观察视角是沿着Z轴的负半轴方向。将实景360场景封装为一个类,代码如下:package{ import flash.display.Sprite; import flash.events.Event; import flash.event原创 2011-12-31 16:23:46 · 4672 阅读 · 2 评论 -
基于MultiPatch的三维管线的生成方法
将二维的管线生成三维的MultiPatch有两种思路,第一种是用TriangleStrip来依次构造出管线首尾处的点;另一种方式是首先构造出管线的一个底面,然后用IConstructMultiPatch接口将该底面拉伸成MultiPatch管线。1.方法一:用TriangleStrip创建MultiPatch类型的管线/// /// 用TriangleStrip创建Mul原创 2012-02-24 12:20:45 · 6518 阅读 · 9 评论 -
基于SceneControl单击查询功能的实现
代码如下: private void HandleIdentify_MouseDown(object sender, ISceneControlEvents_OnMouseDownEvent e) { this.PipeSceneControl.Scene.ClearSelection();//清除之前的选择集,去除高亮显示原创 2012-02-22 17:03:27 · 4224 阅读 · 1 评论 -
OpenGL渲染管线
以下部分节选自Joe Groff的文章《现代OpenGL简介 – 第一章:图形管线》,转载自www.hiwebgl.com 渲染管线的处理流程开始于建立顶点数组(Vertex Array)。这些数组包括了顶点属性(例如顶点在3D空间中转载 2012-05-30 18:09:19 · 3454 阅读 · 0 评论 -
GLSL vs HLSL vs Cg
摘抄自《GPU Programming And Cg Language Primer 1rd Edition》 中文名《GPU编程与CG语言之阳春白雪下里巴人》Shader language目前有3种主流语言:基于OpenGL的GLSL(OpenGL Shading Language,也称为GLslang),基于Direct3D的HLSL(High Level Shading Language转载 2013-07-17 00:31:47 · 5432 阅读 · 1 评论 -
WebGL自学课程(15):WebGL在WebGIS上的应用——WebGlobe
好久没写博客了,最近在工作之余用WebGL做了个WebGlobe,类似于Google Earth之类的东西,当然肯定没人家那个强大了。没有使用任何的WebGL图形库,自己把WebGL绘图命令封装成了一个轻量级的渲染引擎,想通过自己去亲自编码实现洞察Google Earth这种东西是怎么做出来的。整个Demo就一个文件,一共40kb,纯js实现,没有使用任何的第三方图形库或第三方js库。可以加载Go原创 2013-06-18 13:20:28 · 13104 阅读 · 22 评论 -
WebGL自学课程(3):原生WebGL+ArcGIS JS API绘制旋转的地球
注:转载请注明出处通过ArcGIS JS API获取地理数据,然后用原生WebGL将其绘制成旋转的地球。一共需要241271个点,绘制了247个国家或地区。截图:以下是代码: World html,body,div{margin:0;padding:0}原创 2012-07-02 13:35:14 · 11575 阅读 · 6 评论 -
用Three.js根据两个三维点创建Cylinder
Three.js中默认不能直接根据两个三维点的坐标创建Cylinder,创建的Cylinder默认是垂直于XOY平面的,不便于实际应用,下面是用Three.js根据两个三维点创建Cylinder:function createCylinderMesh(x1,y1,z1,x2,y2,z2){ var x0 = (x1 + x2) / 2; var y0 = (y1 +原创 2012-05-15 10:41:34 · 4484 阅读 · 2 评论 -
WebGL自学课程(4):WebGL矩阵、Camera基础操作
直接使用WebGL进行开发比较困难,所以用WebGL进行三维开发一般都要使用框架,本人也在学习WebGL,所以想构建一个自己习惯的框架,正好加深自己对WebGL技术的理解。WebGL框架中最重要的部分应该是矩阵变换以及Camera操作,所以本人首先构建矩阵和摄像机方面的基础代码。本人的代码还比较基础,谈不上框架,只是为了是自己加深理解而已。代码如下:isZero = function(valu原创 2012-07-08 14:16:33 · 4790 阅读 · 0 评论 -
WebGL自学课程(1):原生WebGL简单Demo
以下是一个原生WebGL简单Demo: World html,body,div{margin:0;padding:0} attribute vec3 aPosition; uniform mat4 uModelView原创 2012-06-26 17:35:19 · 8140 阅读 · 0 评论 -
WebGL自学课程(2):使用自定义glTranslate与glRotate
OpenGL中可以直接使用glTranslate与glRotate,但是WebGL1.0规范中并没有包含该函数,如果想使用,需要自己进行实现。以下是示例代码: World html,body,div{margin:0;padding:0} at原创 2012-06-26 23:08:54 · 3860 阅读 · 0 评论 -
OpenGL混合
转载自:http://blog.csdn.net/aurora_mylove/article/details/1700540混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的物体,再绘制红色玻璃。在绘制红色玻璃的时候,利转载 2012-07-27 13:24:41 · 1906 阅读 · 0 评论 -
WebGL自学课程(5):使用一张贴图纹理绘制地球
注:转载请注明出处在《WebGL自学课程(3):原生WebGL+ArcGIS JS API绘制旋转地球》一文中讲述了如何利用地图数据绘制地球的轮廓,但是缺少色彩。本文就是想通过贴图的方式让地球穿上一层靓丽的外衣,并可以通过鼠标拖拽等对绘制的地球进行交互式操作。由于本人《WebGL自学课程(4):WebGL矩阵、Camera基础操作》一文中构建了本人自己常用的代码,封装到World.js原创 2012-07-14 20:21:40 · 7334 阅读 · 0 评论 -
WebGL自学课程(10):通过OpenStreetMap获取数据绘制地球
好久没写博客了,今天再写一篇。前几天想通过OpenStreetMap访问数据来绘制一个最最最最最简单的WebGoogleEarth的雏形,这个Demo比较简单,只是简单的获取OpenStreetMap某一个切片层级下面的所有的切片,然后按照正确的贴图方式绘制在地球上,也就是说这个Demo没有考虑图层的动态管理等等。最后将渲染的代码以EarthOSM类的形式封装到了自己的World.js中,可以用鼠原创 2012-09-13 19:18:22 · 5367 阅读 · 4 评论 -
WebGL自学课程(9):WebGL框架World.js(0.3.5版本)
前一段时间在学WebGL,做了一个TerrainMap的Demo,顺便把一些常用的WebGL代码封装成了一个框架,起了个名字叫做World.js,现在的版本是0.3.5,还很不完善,发到博客上主要是为了方便自己查阅。以下是顶点渲染器VertexShader.txt的代码:attribute vec3 aPosition;attribute vec2 aTextureCoord;va原创 2012-08-20 11:10:34 · 6329 阅读 · 3 评论 -
WebGL自学课程(14):WebGL使用Mipmap纹理
未使用Mipmap纹理前锯齿马赛克明显:使用Mipmap纹理后锯齿马赛克不明显,变模糊了:使用Mipmap代码如下:gl.bindTexture(gl.TEXTURE_2D, texture);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA,原创 2013-05-05 14:58:11 · 5877 阅读 · 0 评论 -
OpenGL ES 2.0编程基础
本人在学WebGL,WebGL的资料很少,由于WebGL是OpenGL ES 2.0的子集,所以先学习一下OpenGL ES 2.0的基础知识。OpenGL中既有固定管线处理流程,也可以使用shader进行可编程的管线处理,OpenGL ES 2.0是完全可编程的管线流程,而没有固定管线流程,这给我们增加了更多的灵活度,以前可以让OpenGL替我们做的事情,现在必须要我们在shader中自己去实现原创 2012-06-10 11:08:02 · 7584 阅读 · 3 评论