快速业务通道

3D盒子

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-12
MC.pic._rotation=Angle1;
textureMC._rotation=-1*Angle3*Angleco
}else{
textureMC._visible=0;
}
}
//===========================end=======================================
//
//=========================透视贴图映射=================================
function FillTexture(){
for(var i in Rectlist){
var Rectnow=Rectlist[i];
if (Rectnow.actable){ //如果这个面允许渲染
//计算这个面的几何中心的屏幕坐标
var vo={},va={},vb={},vc={};
vo.x=(Rectnow.va.x+Rectnow.vc.x)/2;
vo.y=(Rectnow.va.y+Rectnow.vc.y)/2;
vo.z=(Rectnow.va.z+Rectnow.vc.z)/2;
vb=getOne_toxy(V_d,vo);
for(var j=0;j<4;j++){
var textureMC=Rectnow.texture2[j];
switch (j) { //0上--1左--2下--3右
case 0 :
va=Rectnow.va;
vc=Rectnow.vb;
break;
case 1 :
va=Rectnow.vb;
vc=Rectnow.vc;
break;
case 2 :
va=Rectnow.vc;
vc=Rectnow.vd;
break;
case 3 :
va=Rectnow.vd;
vc=Rectnow.va;
break;
}
renderTriTexture(va, vb, vc, textureMC);
}
}
}
}
//===========================end=======================================
//
// 面排序
function SortPolygon(){
for(var i in Rectlist){
var Rectnow=Rectlist[i];
Rectnow.texture.swapDepths(i-10*(Rectnow.va.z+Rectnow.vc.z));
}
}
// 线框渲染
function RanderByLine(){
createEmptyMovieClip("linelayer",100);
linelayer._x=CameraCenterX;
linelayer._y=CameraCenterY;
linelayer.lineStyle(1,0x504040);
for(var i in Rectlist){
if (!Rectlist[i].actable) continue;
var Rectnow=Rectlist[i]
linelayer.moveTo(Rectnow.va.vx,Rectnow.va.vy);
linelayer.lineTo(Rectnow.vb.vx,Rectnow.vb.vy);
linelayer.lineTo(Rectnow.vc.vx,Rectnow.vc.vy);
linelayer.lineTo(Rectnow.vd.vx,Rectnow.vd.vy);
linelayer.lineTo(Rectnow.va.vx,Rectnow.va.vy);
}
}
//----------------------以上部分为ox老大所作-----------------------------
//----------------------以下部分是自己抄来的-------------------------------
//3d变换部分的函数
//
// 单个空间点旋转变换,xa,ya,za均为角度值,dotArray为存储点集的数组名,num为需要操作的空间点的编号
function dot_rotate(xa, ya, za, dotArray,num) {
var rad = Math.PI/180;
xa *= rad;
ya *= rad;
za *= rad;
var sin_xa = Math.sin(xa);
var cos_xa = Math.cos(xa);
var sin_ya = Math.sin(ya);
var cos_ya = Math.cos(ya);
var sin_za = Math.sin(za);
var cos_za = Math.cos(za);
var px, py, pz, tempx, tempy, tempz;
px = dotArray[num].x;
py = dotArray[num].y;
pz = dotArray[num].z;
tempx = (pz*cos_xa)-(py*sin_xa);
tempy = (px*cos_ya)-(pz*sin_ya);
tempz = (py*cos_za)-(px*sin_za);
//
// dotArray[num].x = (py*sin_za)+(px*cos_za);
dotArray[num].x = (py*sin_za)+(tempy*cos_za);
dotArray[num].y = (pz*sin_xa)+(tempz*cos_xa);
// dotArray[num].z = (pz*cos_xa)-(tempz*sin_xa);
dotArray[num].z = (px*sin_ya)+(tempx*cos_ya);
//
//
}
//整个点集的旋转变换:xa,ya,za均为角度值,dotArray为存储点集的数组名
function dot_rotateAll(xa, ya, za, dotArray) {
for(var i in dotArray){
dot_rotate(xa, ya, za, dotArray,i);
}
}
//将单个空间点透视投影到xy平面,d为视点到投影面的距离,dot为需要作透视投影的点
function getOne_toxy(d,dot) {
var k = 1-dot.z/d;
dot.vx = dot.x/k;
dot.vy = -dot.y/k;
return dot;
}
// 将空间点集透视投影到xy平面,d为视点到投影面的距离,dotArray为存储点集

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号