当前位置:  编程技术>WEB前端
本页文章导读:
    ▪Three.js Demo源码分析-1.MorphTargets与BufferGeometry      Three.js主页上有很多绚丽的Demo,是学习的极佳素材。我正利用闲暇时间学习这些Demo,并将心得体会记录下来。老调重弹先睹为快空间中旋转的立方体板条箱,恐怕是主页上最简单的一个例子.........
    ▪extjs 开发注意事项       1、 最近一直在找 datefield 控件的显示不全的原因  。       在网上找到了这样一个代码可以解决这个问题。 1: Ext.override(Ext.menu.DateMenu, { 2: autoWidth: function().........
    ▪怎样创建SVN仓库目录结构      SVN目录的创建,是SVN管理的第一步   工具:SVN客户端   步骤/方法 1、点击右键TortoiseSVN  Repo-browser可以查看SVN浏览器   2、在浏览器中输入svn://localhost/ ,SVN仓库的负责人规划好.........

[1]Three.js Demo源码分析-1.MorphTargets与BufferGeometry
    来源:    发布时间: 2013-11-06

Three.js主页上有很多绚丽的Demo,是学习的极佳素材。我正利用闲暇时间学习这些Demo,并将心得体会记录下来。

老调重弹

先睹为快

空间中旋转的立方体板条箱,恐怕是主页上最简单的一个例子了。在WebGL原生API教程中就有这个例子,用Three.js实现起来更加方便了。但是,作为开始的开始,还是再重弹一遍老调吧。

较简单的例子多采用这种一目了然的结构:

// 在<body>尾部:
// 一些全局变量
var camera, scene, renderer;
var mesh;
// 初始化函数,仅运行一次
function init(){
// 初始化这些全局变量
}
// 动画函数,每一帧运行一次
function animate(){
requestAnimationFrame(animate);
// 动画和绘图
}
init();
animate();

 在init()中初始化相机,场景,渲染器,轻车熟路。

renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

camera = new THREE.PerspectiveCamera(70, window.innerWidth/window.innerHeight, 1, 1000);
camera.position.z = 400;

scene = new THREE.Scene();

创建一个立方体mesh,贴上纹理,并加入到场景中。

var geometry = new THREE.CubeGeometry(200, 200, 200);

var texture = THREE.ImageUtils.loadTexture('code.JPG');
texture.anisotropy = renderer.getMaxAnisotropy();

var material = new THREE.MeshBasicMaterial({map:texture});

mesh = new THREE.Mesh(geometry, material);

scene.add(mesh);

在animate()中渲染,结束。

function animate(){
requestAnimationFrame(animate);

mesh.rotation.x += 0.005;
mesh.rotation.y += 0.01;

renderer.render(scene, camera);
}

这个例子就不多说了,代码放在这里只是作为最简单的开始。如果你之前使用过Three.js,一段时间不用后有所生疏,这个例子可以迅速将你唤醒。

MorphTargets

先睹为快

MorphTargets允许物体发生变形。如果该物体的geometry有 $n$ 个顶点,那么MorphTargets允许你再指定 $n$ 个, $2n$ 个, $3n$ 个甚至更多个顶点(比如,$ p\cdot n$ 个),同时mesh对象提供一个数组morphTargetInfluences(公式中$ f_{j} $表示morphTargetInfluences[j]),具有 $p$ 个元素,每个元素取值在0-1之间。渲染这个物体的时候,某个顶点 $V_{i}$ 的位置其实变了,成了:

$$V_{i}=V_{i}+\sum_{j=0}^{p}f_{j}\cdot (V_{j,i}-V_{i})$$

举个简单的例子,一个立方体有8个顶点,MorphTargets又指定了8个顶点,立方体的一个顶点为(1,1,1),而在MorphTargets中与之对应的顶点为(2,2,2),那么当morphTargetInfluences[0]为0.5的时候,实际渲染的时候该顶点的位置就成了(1.5,1.5,1.5)。这样做的好处是显而易见的,你可以通过简单地调整morphTargetInfluences数组来使物体形变,只要之前你设置好了。

向物体加入morphTargets的方法很简单:

var geometry = new THREE.CubeGeometry(100,100,100);
var material = new THREE.MeshLambertMaterial({color:0xffffff, morphTargets:true});

var vertices = [];
for(var i=0; i<geometry.vertices.length; i++)
{
var f = 2;
vertices.push(geometry.vertices[i].clone());
vertices[i].x *= f;
vertices[i].y *= f;
vertices[i].z *= f;
}
geometry.morphTargets.push({name:'target0', vertices:vertices});

 在其他什么地方(比如animate()或render()方法中)改变morphTargetInfluences,实在方便

var s = 0;
function render()
{
s += 0.03;
mesh.morphTargetInfluences[0] = Math.abs(Math.sin(s));
...
}

最关键的问题是,我相信,这个功能是通过着色器来完成的。我阅读过一些简单的着色器,因此我发现在着色器中完成这件事实在太合适了。如果某个geometry有几千甚至上万个顶点,使用JavaScript逐个计算变形后顶点的位置会造成很大压力,而显卡大规模并行计算的能力很适合处理这个任务(毕竟每个顶点是独立地)。

BufferGeometry

先睹为快

BufferGeometry是自由度最高的geometry类型了,你可以自由指定每个顶点的位置、颜色、法线(影响光照)。

所谓Buffer,缓冲区,就是指顶点位置数组、顶点颜色数组等JavaScript二进制数组。这样定义一个BufferGeometry:

var geometry = new THREE.BufferGeometry();
geometry.attributes = {
index:{
itemSize:1,
array:new Uint16Array(triangles*3),
numItems:triangles*3
},
position:{
itemSize:3,
array:new Float32Array(triangles*3*3),
numItems:triangles*3*3
},
normal:{
itemSize:3,
array:new Float32Array(triangles*3*3),
numItems:triangles*3*3
},
color:{
itemSize:3,
array:new Float32Array(triangles*3*3),
numItems:triangles*3*3
}
};

这个例子通过好几个循环,在一个800宽度的立方体范围内随机构造了16万个尺寸1-12的小三角形,计算了法向,并按照位置赋值了颜色,指定了材质。

    
[2]extjs 开发注意事项
    来源: 互联网  发布时间: 2013-11-06

 1、 最近一直在找 datefield 控件的显示不全的原因  。  

 

  在网上找到了这样一个代码可以解决这个问题。

   1:  Ext.override(Ext.menu.DateMenu, {
   2:          autoWidth: function() {
   3:              var el = this.el, ul = this.ul;
   4:              if (!el) {
   5:                  return;
   6:              }
   7:              var w = this.width;
   8:              if (w) {
   9:                  el.setWidth(w);
  10:              } else if (Ext.isIE && !Ext.isIE8) {
  11:                  el.setWidth(this.minWidth);
  12:                  var t = el.dom.offsetWidth; // force recalc
  13:                  el.setWidth(ul.getWidth() + el.getFrameWidth("lr"));
  14:              }
  15:          }
  16:      });

在开发 extjs 我总结了以下几点希望开发 extjs 朋友注意以下


1、 html 中DOCTYPE  

           html 中的 doctype  定义对 IE  是特别敏感的  。  所以本人建议大家不要写  .

2、X-UA-Compatible 设定 IE 解析本版在

          由于本人使用的是  IE  9 可以通过  X-UA-Compatible 设定到 IE 6, IE 7 , IE8  几个本版  。

      经过测试  IE 8  对 extjs2.x 本版的兼容性不是很好。 在这里我建议大家少写

3、 extjs  的本版

        如果是extjs 新人建议使用高版本的进行开发 。 

 

作者:xiegqooo 发表于2013-2-22 11:49:13 原文链接
阅读:0 评论:0 查看评论

    
[3]怎样创建SVN仓库目录结构
    来源: 互联网  发布时间: 2013-11-06

SVN目录的创建,是SVN管理的第一步

 

工具:SVN客户端

 

步骤/方法

1、点击右键TortoiseSVN  Repo-browser可以查看SVN浏览器

 

2、在浏览器中输入svn://localhost/ ,SVN仓库的负责人规划好仓库的目录结构。推荐的目录结构如下图所示。

 

注意事项

  • 仓库的一级目录只有两个,分别为code和doc。其中,doc主要用来放置先期的文档,code主要用来放置工程的代码,也可以包含后期的文档。
  • 仓库的二级目录只可以是branch与trunk两个目录,分别存放主干与分支。trunk目录下直接存放工程文件。branch目录下包括一些子目录分别对应各个分支。

     

     

     

  • 作者:zyuc_wangxw 发表于2013-2-22 13:29:45 原文链接
    阅读:0 评论:0 查看评论

        
    最新技术文章:
    ▪css white-space:nowrap属性用法(可以强制文字不...
    ▪IE里button设置border:none属性无效解决方法
    论坛 iis7站长之家
    ▪html清除浮动的6种方法示例
    ▪三个不常见的 HTML5 实用新特性简介
    ▪css代码优化的12个技巧
    ▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
    ▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
    ▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
    ▪小技巧处理div内容溢出
    ▪html小技巧之td,div标签里内容不换行
    ▪纯CSS实现鼠标放上去改变文字内容
    ▪li中插入img图片间有空隙的解决方案
    ▪CSS3中Transition属性详解以及示例分享
    ▪父div高度不能自适应子div高度的解决方案
    ▪告别AJAX实现无刷新提交表单
    ▪从零学CSS系列之文本属性
    ▪HTML 标签
    ▪CSS3+Js实现响应式导航条
    ▪CSS3实例分享之多重背景的实现(Multiple background...
    ▪用css截取字符的几种方法详解(css排版隐藏溢...
    ▪页面遮罩层,并且阻止页面body滚动。bootstrap...
    ▪CSS可以做的几个令你叹为观止的实例分享
    ▪详细分析css float 属性以及position:absolute 的区...
    ▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
    ▪CSS小例子(只显示下划线的文本框,像文字一...
    ▪可以给img元素设置背景图
    ▪不通过JavaScript实现的自动滚动视差效果
    ▪div+CSS 兼容小摘
    ▪CSS的inherit与auto使用分析
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3