初学WebGL引擎-BabylonJS:第3篇-方向纹理与相机
【playground】-rotatuib abd scaling(方向)
源码
var createScene = function () {
var scene = new BABYLON.Scene(engine); var camera = new BABYLON.ArcRotateCamera("Camera", Math.PI, Math.PI / 8, 150, BABYLON.Vector3.Zero(), scene); camera.attachControl(canvas, true); var light = new BABYLON.HemisphericLight("hemi", new BABYLON.Vector3(0, 1, 0), scene); //Creation of 3 boxes and 2 spheres
var box1 = BABYLON.Mesh.CreateBox("Box1", 6.0, scene);
var box2 = BABYLON.Mesh.CreateBox("Box2", 6.0, scene);
var box3 = BABYLON.Mesh.CreateBox("Box3", 6.0, scene);
var box4 = BABYLON.Mesh.CreateBox("Box4", 6.0, scene);
var box5 = BABYLON.Mesh.CreateBox("Box5", 6.0, scene);
var box6 = BABYLON.Mesh.CreateBox("Box6", 6.0, scene);
var box7 = BABYLON.Mesh.CreateBox("Box7", 6.0, scene); //Moving boxes on the x axis
box1.position.x = -20;
box2.position.x = -10;
box3.position.x = 0;
box4.position.x = 15;
box5.position.x = 30;
box6.position.x = 45; //Rotate box around the x axis
box1.rotation.x = Math.PI / 6; //Rotate box around the y axis
box2.rotation.y = Math.PI / 3; //Scaling on the x axis
box4.scaling.x = 2; //Scaling on the y axis
box5.scaling.y = 2; //Scaling on the z axis
box6.scaling.z = 2; //Moving box7 relatively to box1
box7.parent = box1;
box7.position.z = -10; return scene;
}
效果
笔记:
该案例主要讲解物体的方向和定位处理。在原有的声明变量中的定位改为更新新的定位和指定方向
基于X轴的定位更新:box1.position.x = -20;
基于X轴的旋转更新:box1.rotation.x = Math.PI / 6;
基于X轴的拉伸更新:box4.scaling.x = 2;
父子相对定位:box7.parent = box1;box7.position.z = -10;(该部分和用于茶座与杯子的关系处理)
【playground】-materials(纹理)
源码
var createScene = function () {
var scene = new BABYLON.Scene(engine); //Create a light
var light = new BABYLON.PointLight("Omni", new BABYLON.Vector3(-60, 60, 80), scene); //Create an Arc Rotate Camera - aimed negative z this time
var camera = new BABYLON.ArcRotateCamera("Camera", Math.PI / 2, 1.0, 110, BABYLON.Vector3.Zero(), scene);
camera.attachControl(canvas, true); //Creation of 6 spheres
var sphere1 = BABYLON.Mesh.CreateSphere("Sphere1", 10.0, 9.0, scene);
var sphere2 = BABYLON.Mesh.CreateSphere("Sphere2", 2.0, 9.0, scene);//Only two segments
var sphere3 = BABYLON.Mesh.CreateSphere("Sphere3", 10.0, 9.0, scene);
var sphere4 = BABYLON.Mesh.CreateSphere("Sphere4", 10.0, 9.0, scene);
var sphere5 = BABYLON.Mesh.CreateSphere("Sphere5", 10.0, 9.0, scene);
var sphere6 = BABYLON.Mesh.CreateSphere("Sphere6", 10.0, 9.0, scene); //Position the spheres
sphere1.position.x = 40;
sphere2.position.x = 25;
sphere3.position.x = 10;
sphere4.position.x = -5;
sphere5.position.x = -20;
sphere6.position.x = -35; //Creation of a plane
var plane = BABYLON.Mesh.CreatePlane("plane", 120, scene);
plane.position.y = -5;
plane.rotation.x = Math.PI / 2; //Creation of a material with wireFrame
var materialSphere1 = new BABYLON.StandardMaterial("texture1", scene);
materialSphere1.wireframe = true; //Creation of a red material with alpha
var materialSphere2 = new BABYLON.StandardMaterial("texture2", scene);
materialSphere2.diffuseColor = new BABYLON.Color3(1, 0, 0); //Red
materialSphere2.alpha = 0.3; //Creation of a material with an image texture
var materialSphere3 = new BABYLON.StandardMaterial("texture3", scene);
materialSphere3.diffuseTexture = new BABYLON.Texture("textures/misc.jpg", scene); //Creation of a material with translated texture
var materialSphere4 = new BABYLON.StandardMaterial("texture4", scene);
materialSphere4.diffuseTexture = new BABYLON.Texture("textures/misc.jpg", scene);
materialSphere4.diffuseTexture.vOffset = 0.1;//Vertical offset of 10%
materialSphere4.diffuseTexture.uOffset = 0.4;//Horizontal offset of 40% //Creation of a material with an alpha texture
var materialSphere5 = new BABYLON.StandardMaterial("texture5", scene);
materialSphere5.diffuseTexture = new BABYLON.Texture("textures/tree.png", scene);
materialSphere5.diffuseTexture.hasAlpha = true;//Has an alpha //Creation of a material and show all the faces
var materialSphere6 = new BABYLON.StandardMaterial("texture6", scene);
materialSphere6.diffuseTexture = new BABYLON.Texture("textures/tree.png", scene);
materialSphere6.diffuseTexture.hasAlpha = true;//Have an alpha
materialSphere6.backFaceCulling = false;//Show all the faces of the element //Creation of a repeated textured material
var materialPlane = new BABYLON.StandardMaterial("texturePlane", scene);
materialPlane.diffuseTexture = new BABYLON.Texture("textures/grass.jpg", scene);
materialPlane.diffuseTexture.uScale = 5.0;//Repeat 5 times on the Vertical Axes
materialPlane.diffuseTexture.vScale = 5.0;//Repeat 5 times on the Horizontal Axes
materialPlane.backFaceCulling = false;//Always show the front and the back of an element //Apply the materials to meshes
sphere1.material = materialSphere1;
sphere2.material = materialSphere2; sphere3.material = materialSphere3;
sphere4.material = materialSphere4; sphere5.material = materialSphere5;
sphere6.material = materialSphere6; plane.material = materialPlane; return scene;
};
效果
笔记:
本案例讲解了6种纹理的处理方式
1.镂空
materialSphere1.wireframe = true
2.纯色+透视
materialSphere2.diffuseColor = new BABYLON.Color3(1, 0, 0); 纯色贴图
materialSphere2.alpha = 0.3;透视
3.jpg贴图
materialSphere3.diffuseTexture = new BABYLON.Texture("textures/misc.jpg", scene);jpg贴图
4.jpg贴图翻转
materialSphere4.diffuseTexture.vOffset = 0.1;垂直翻转
materialSphere4.diffuseTexture.uOffset = 0.4;水平翻转
5.png贴图
materialSphere5.diffuseTexture = new BABYLON.Texture("textures/tree.png", scene);
materialSphere5.diffuseTexture.hasAlpha = true;//适用png的透明(游戏开发的朋友告诉我png比较消耗性能)
6.png贴图翻转
materialSphere6.backFaceCulling = false;//背面贴图显示
另外本案例的镜头比较有意思,可以自由移动切换视角
【playground】-cameras(相机)
源码
var createScene = function () {
var scene = new BABYLON.Scene(engine); // Setup a simple environment
var light0 = new BABYLON.PointLight("Omni", new BABYLON.Vector3(0, 2, 8), scene);
var box1 = BABYLON.Mesh.CreateBox("b1", 1.0, scene);
var box2 = BABYLON.Mesh.CreateBox("b2", 1.0, scene);
box2.position.x = -3;
var box3 = BABYLON.Mesh.CreateBox("b3", 1.0, scene);
box3.position.x = 3; // ArcRotateCamera >> Camera rotating around a 3D point (here Vector zero)
// Parameters : name, alpha, beta, radius, target, scene
var arcCamera = new BABYLON.ArcRotateCamera("ArcRotateCamera", 1, 0.8, 10, new BABYLON.Vector3(0, 0, 0), scene);
arcCamera.setPosition(new BABYLON.Vector3(0, 0, 50));
arcCamera.target = new BABYLON.Vector3(3, 0, 0); // FreeCamera >> You can move around the world with mouse and keyboard (LEFT/RIGHT/UP/DOWN)
// Parameters : name, position, scene
var freeCamera = new BABYLON.FreeCamera("FreeCamera", new BABYLON.Vector3(0, 0, 5), scene);
freeCamera.rotation = new BABYLON.Vector3(0, Math.PI, 0); // TouchCamera >> Move in your world with your touch screen (or with your mouse, by drag/drop)
// Parameters : name, position, scene
var touchCamera = new BABYLON.TouchCamera("TouchCamera", new BABYLON.Vector3(0, 0, 10), scene);
touchCamera.rotation = new BABYLON.Vector3(0, Math.PI, 0); //Attach a camera to the scene and the canvas
scene.activeCamera = freeCamera;
freeCamera.attachControl(canvas, true); return scene;
}
效果
笔记:
该案例介绍了3种相机的处理
ArcRotateCamera:以一点为镜头方向点运转,移动相机位置后仍旧镜头朝向目标
FreeCamera:相机固定,可自由变换镜头方向(类似于CS活着时候的视角)
TouchCamera:相机移动,镜头点也跟着移动(类似CS死掉后的上帝视角)
可以更换scene.activeCamera = freeCamera;freeCamera.attachControl(canvas, true);的相机指定,拖动鼠标和键盘上下左右感受不一样的效果
初学WebGL引擎-BabylonJS:第3篇-方向纹理与相机的更多相关文章
- 初学WebGL引擎-BabylonJS:第0篇-起因
学习WebGL的BabylonJS是在一次偶然的情况下进行的,主要为了满足个人对全栈开发的欲望. 言归正传,下面开始简单说说相关过程 WebGL是什么?WebGL是基于html的客户端页面技术,基于h ...
- 初学WebGL引擎-BabylonJS:第1篇-基础构造
继续上篇随笔 步骤如下: 一:http://www.babylonjs.com/中下载源码.获取其中babylon.2.2.js.建立gulp项目
- 初学WebGL引擎-BabylonJS:第8篇-阴影网格与活动
[playground]-shadows(阴影) 源码 var createScene = function () { var scene = new BABYLON.Scene(engine); / ...
- 初学WebGL引擎-BabylonJS:第6篇-碰撞交错与挑选
[playground]-collisions(碰撞) 先贴官方源码(机器翻译版本) var createScene = function () { var scene = new BABYLON.S ...
- 初学WebGL引擎-BabylonJS:第4篇-灯光动画与丛林场景
前几章接触的案例都是接近静态的,由这张开始开始接触大量动态的内容,包括 球体灯光,变动的形体,以及一个虚拟的丛林场景 下章我会试着结合1-9案例的内容做出一个demo出来 [playground]-l ...
- 初学WebGL引擎-BabylonJS:第2篇-基础模型体验
此次学习进度会比之前快很多,有了合适的学习方法后也就会有更多的乐趣产生了. 接上一章代码 上章代码 <!DOCTYPE html> <html> <head> &l ...
- [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...
- CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷
CROW-5 WEB APP引擎商业计划书(HTML5方向)-微信网页版微信公众平台登录-水仙谷 CROW-5 WEB APP引擎商业计划书(HTML5方向)
- 用基于WebGL的BabylonJS来共享你的3D扫描模型
转自:http://www.geekfan.net/6578/ 用基于WebGL的BabylonJS来共享你的3D扫描模型 杰克祥子 2014 年 2 月 26 日 0 条评论 标签:3D扫描 , B ...
随机推荐
- (转)Qt添加windows开机自启动
原博文地址为:https://blog.csdn.net/x356982611/article/details/53183144 简介 window下开机启动最简单的实现方式就是在注册表中添加启动项目 ...
- 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
生活中有很多场景都需要我们签字(签名),如果是一些不重要的场景,我们的签名好坏基本无所谓了,但如果是一些比较重要的场景,如果我们的签名比较差的话,就有可能给别人留下不太好的印象了,俗话说字如其人嘛,本 ...
- 曲线生成与求交—B样条曲线
B样条曲线生成 Bezier曲线缺点:改变任一控制点的位置,将影响整条曲线的形状. B样条曲线是对Bezier曲线的改进,可进行局部控制,生成的曲线与控制多边形的外形更接近,将Bezier曲线作为一特 ...
- C#LeetCode刷题之#415-字符串相加(Add Strings)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3873 访问. 给定两个字符串形式的非负整数 num1 和num2 ...
- Error:Failed to resolve: com.android.support:recyclerview-v7:28.0.0解决方法
在使用Android Studio的过程中需要添加依赖recyclerview,出现报错: Unable to resolve dependency for ':app@debug/compileCl ...
- unity3d学习笔记(一) 第一人称视角实现和倒计时实现
unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...
- Java indexof
java中字符串方法 indexof() indexof()可以返回输入的字符串在目标字符串中第一次出现的位置,如果没有出现返回int 0:
- vue_如何判断变量是数组还是对象
一.typeof判断数据类型(判断数组跟对象都返回object) console.log(typeof null); // "object" console.log(typeof ...
- Node.js简易服务器,配合type="module" 实现html文件script标签 ES module引入模块
相信大家在测试type="module" 在html文件中直接模块化引入 js时,会出现一个跨域问题. 当我们将<script ></scirpt> 标签t ...
- MSDN 无法显示的问题 2010-03-21 21:08
MSDN 无法显示的问题regsvr32 "C:\Program Files\Common Files\Microsoft Shared\Help\hxds.dll" .试图运行项 ...