快速业务通道

3D球棍模型

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-11


点击浏览该文件
源文件:
点击浏览该文件
UploadFile/2004-4/20044312818100.swf
数据结构及数据定义(代码位于主场景第1帧)
小球,小棍分别用一个数组存储:dot[sm]和gun[sm_gun] ,sm是小球的数目,sm_gun是小棍的数目。 小球:
x,y,z(空间坐标)[初始化时提供值]
vx,vy(屏幕显示坐标)[这两个值由函数"v_xz()"计算得到]
col(颜色,实际上是帧数。小球是个含有若干关键帧的MC,显示时由col决定停在哪一帧上)[初始化时提供值]
r(半径,实际上是为了小棍的"消隐"而设计这个值的,本程序中的小球未使用r)[初始化时提供值] 小棍:
dot_s,dot_e(分别是起点和终点小球的编号)[初始化时提供值]
sx,sy,sz(实际起点的空间坐标)[由函数"gun_js()"根据起点终点小球坐标以及起点小球的半径算得] ex,ey,ez(实际终点的空间坐标)[由函数"gun_js()"根据起点终点小球坐标以及终点小球的半径算得] svx,svy(起点的屏幕显示坐标)[由函数"v_xz()"根据sx,sy,sz的值计算]
evx,evy(终点的屏幕显示坐标)[由函数"v_xz()"根据ex,ey,ez的值计算]
oy(小棍中点处的空间坐标的y值,用于比较深度)[根据起点终点小球的空间坐标y值计算] 下面以甲烷的数据为例:
// 甲烷
function get_data_2() {
// 小球初始化
// 小球数目
sm = 5;
dot = new Array(sm);
for (i=0; idot[i] = new Object();
dot[i].x = 0;
dot[i].y = 0;
dot[i].z = 0;
dot[i].vx = 0;
dot[i].vy = 0;
dot[i].col = 0;
dot[i].r = 5;
}
// 0
dot[0].x = 50;
dot[0].y = 50;
dot[0].z = 50;
dot[0].col = 1;
// 1
dot[1].x = -50;
dot[1].y = -50;
dot[1].z = 50;
dot[1].col = 2;
// 2
dot[2].x = -50;
dot[2].y = 50;
dot[2].z = -50;
dot[2].col = 3;
// 3
dot[3].x = 50;
dot[3].y = -50;
dot[3].z = -50;
dot[3].col = 4;
// 4
dot[4].x = 0;
dot[4].y = 0;
dot[4].z = 0;
dot[4].col = 10;
// 小球初始化完成
//
// 小棍初始化
// 小棍的数目
sm_gun = 4;
gun = new Array(sm_gun);
for (i=0; igun[i] = new Object();
gun[i].dot_s = 0;
gun[i].dot_e = 0;
gun[i].sx = 0;
gun[i].sy = 0;
gun[i].sz = 0;
gun[i].ex = 0;
gun[i].ey = 0;
gun[i].ez = 0;
gun[i].oy = 0;
// 屏幕坐标(起点和终点)
gun[i].svx = 0;
gun[i].svy = 0;
gun[i].evx = 0;
gun[i].evy = 0;
}
// 0
gun[0].dot_s = 0;
gun[0].dot_e = 4;
// 1
gun[1].dot_s = 1;
gun[1].dot_e = 4;
// 2
gun[2].dot_s = 2;
gun[2].dot_e = 4;
// 3
gun[3].dot_s = 3;
gun[3].dot_e = 4;
// 小棍初始化完成
}
//
自定义函数和主调程序段:(代码位于主场景第2帧)
gun_js() [为达到消隐的目的,小棍的起点和终点必须是在球的表面上,而不是球的中心。本函数就是根据起点小球和终点小球的空间坐标来计算小棍实际的起点和终点的空间坐标。另外还计算了小棍中点处的空间坐标y值,这个值用于比较深度,也是为消隐作准备]
scale(s) [整体缩放函数,本程序中未使用]
rotate(xa, ya) [旋转函数,xa是绕x轴旋转的角度值,而ya是绕z轴旋转的角度值,并不是y轴,这是变量名书写不当造成的,未做修改]
v_xz(d) [本函数将小球,小棍的空间坐标换算成屏幕显示坐标,也就是将那些坐标点投影到xz平面上,d是视点到xz平面的距离]
get_deeps() [将各小球,各小棍的深度值取出,放到一个新的数组中,并同时记录小球或小棍的编号。由于小球,小棍的编号都是从0开始,为了区分小球和小棍,特将小棍的编号加上1000后再存储。执行此函数后得到一个存有深度值和对应编号的数组"deeps[sm+sm_gun]",后面进行消隐显示时就方便了]
get_v() [消隐显示,从最深度最大者开始,逐个显示小球或小棍。从数组"deeps[sm+sm_gun]"中找出y值最小者,即深度最

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号