作家
登录

基于web创建逼真的3D图形 | CSS技巧

作者: 来源: 2017-09-19 15:04:17 阅读 我要评论

document.getElementById('webgl').appendChild(renderer.domElement);`

当做屠?;切,你可以视在衬着器上 衬着 的┞封种办法,是供给场景和相机作为参数对象。

为了让代码更简洁,在函数 init 琅绫擎进行调用和履行功能。

也许你如今什么也看不见...除了黑屏。别急,这是正常的。这个场景是正常工作的,然则你没有包含任何的对象再场景琅绫擎,你所看到的根本上是空的空间,接下来,你会应用3D对象填衬┞封个场景。

看 the Pen learning-threejs-01 by Engin Arslan ( @enginarslan )>

3D调和

让我们把拍照机20个单位移到z轴上。这是经由过程在摄像机上设置 * 地位的属性来实现的。3D对象有 position , rotation 和 scale 属性,可以许可你在3D空间琅绫擎随便率性扭转它们。

camera.position.z = 20;`

你可以移动摄像机以及其他轴。

camera.position.x = 0;camera.position.y = 5;camera.position.z = 20;

相机如今地位更高了,然则球体不再在框架的中间肠位了。你须要把相机指向它。为了可以或许做到如许,你可声调用相机的一个办法称为 lookAt 。经由过程相机上的 lookAt 办法肯定哪些点是相机指向的。在三维空间中的点表示的是向量。所以,你可以经由过程一个新的 Vector3 对象,这 lookAt 办法能在0, 0, 0相机坐标看。

camera.lookAt(new THREE.Vector3(0, 0, 0));`

球对象如今看起来不是很圆。究其原因,是 spheregeometry 函数实际上接收两个额外的参数,宽度和高度细分,影响 resolution 外面。增长这些值,腻滑的曲面会出现。我将此值设置为24的宽度和高度细分。

接下来,你须要加载纹理并将其应用到平面上。为此您将应用three.js。在加载纹理之后,你会将纹理加载到所需材质的地图属性中,将其作为一种色彩地图在外面上。

init();`
var geo = new THREE.SphereGeometry(radius, 24, 24);`

See the Pen learning-threejs-03 by Engin Arslan ( @enginarslan ) on CodePen .

如今,您将创建一个简单的平面几何的球体。 PlaneGeometry 函数请求有 width 和 height 参数。在3D中,2D对象没有默认的两个侧面,所以你须要将一个 side 属性传递给材质,使平面几何体的两边出现。

function getPlane(w, h) {  var geo = new THREE.PlaneGeometry(w, h);  var material = new THREE.MeshBasicMaterial({    color: 0x00ff00,    side: THREE.DoubleSide,  });  var mesh = new THREE.Mesh(geo, material);  return mesh;}

本教程假设对前端JavaScript以及对前端Web开辟的常识有一些懂得。如不雅您不习惯应用JavaScript,但欲望轻松上手,您可能须要查看课程/书本。 ["Coding for Visual Learners: Learning JavaScript with p5.js"( http://www.codingforvisuallearners.com/ ). (免责声明:我是作者)

如今你可以往这个平面对象里添加场景。你会留意到,平面几何的初始扭转是平行于y轴,但你可能须要它是程度的,因为它作为一个接地平面,你须要记住一件重要的事,那就是three.js里的扭转。它们用 radians 为单位,不消 degrees 。弧度扭转90度相当于 π/ 2 数学。

这是为了确保没有任何的margin和padding值,可以经由过程您的浏览器应用,不会出现滚动条,是以可以有图形填衬┞符个屏幕。这就是我们开端构建3D图形须要的一切。

第一部分 - Three.js 根本场景

当你创造一个球对象,它用它的中间点定位。如不雅你想把它移动到地面上,那么你可以只增长它的'地位' Y值的当前半径的数量。但这不会是一个纲领性的干事方法。如不雅你想让球体逗留在平面上,不管它的半径值是若干,你都应当应用半径值来定位。

sphere.position.y = sphere.geometry.parameters.radius;`

看 the Pen learning-threejs-04 by Engin Arslan ( @enginarslan ) on CodePen .

动画

你几乎完成了本教程的第一部分。但在我们把它整合起来之前,我想解释一下若何用three.js来做动画。three.js动画中应用的 requestanimationframe 办法对 窗口 对象反复履行一个给定的函数。它有点像一个 setInterval 函数,但它是绘制浏览器运行机能。

创造一个 update 函数,经由过程衬着,场景,和相机在那边履行衬着办法,在函数内进行衬着。你将会在内部声明 requestAnimationFrame 函数,并将 更新 函数,经由过程对 requestanimationframe 函数递归进行回调,如许解释代码比写出来更好。

function update(renderer, scene, camera) {  renderer.render(scene, camera);  requestAnimationFrame(function() {    update(renderer, scene, camera);  });}

在这一点上一切看起来都一样,但核心的差别是, requestanimationframe 函数是使场景衬着每秒约60帧递归调用的 更新 函数。这意味着如不雅你正在 update 函数琅绫擎履行语句,该语句将以每秒60次的速度履行。让我们添加一个缩放动画球对象。为了大年夜 update 函数中选择球体对象,您可以将它作为参数传递,但我们将应用不合的技巧。起首,在球对象上设置一个 name 属性,并给它取一个你爱好的名字。

sphere.name = 'sphere';`

在update函数内部,你可以应用它的名字,并且应用 getObjectByName 办法在其父对象上,找到该对象,这个场景。

var sphere = scene.getObjectByName('sphere');sphere.scale.x += 0.01;sphere.scale.z += 0.01;	
				
			

  推荐阅读

  微服务后如何做一次系统梳理

【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! 微办事的重要目标是将本>>>详细阅读


本文标题:基于web创建逼真的3D图形 | CSS技巧

地址:http://www.17bianji.com/lsqh/37523.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)