中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術文檔 > 多媒體制作 > 用flash 5 action 制作3d效果
flash 顏色 action 自定義教程 回到列表 Director 里幾個save命令的區(qū)別
 用flash 5 action 制作3d效果

作者:redsteps 時間: 2003-04-19 文檔類型:原創(chuàng) 來自:藍色理想

用flash action制作3d效果

春節(jié)以前在論壇上發(fā)布了我剛剛做出的矢量分解3d效果演示的flash,引起了很多網友索要教程,當時許諾春節(jié)后寫教程的,F在把教程寫出來,還不算太晚吧!不過我再多說一句,如果有人想轉載的話,請注明作者和出處。

這個3d效果演示的框架是從去年暑假編寫出的雛形,當時得到了同學張旭的熱心幫助。雖然action腳本有些亂,自己感覺效果還是不錯,于是把源碼mailto了閃客帝國,終于杳無音信了。這個寒假里又需要制作類似的3d效果,終于又完全重新編寫了一遍,畫線使用了goldgoat的連線程序,3d引擎注意了結構化編程,現在的這個版本算是渙然一新了。這其間,得到了QUESTER等網友的建議和幫助,在此一并表示感謝。

在這次發(fā)布前,我又對源碼進行了一遍修改,修正了不妥之處,把所有的action集中到了一個mc里,很詳盡的加進了注釋,這個版本和我給冷語等網友過目的又有很大不同了。雖歷經多次修改,里面可能還有隱藏的bug,希望網友給予批評指正。

廢話少說,我們先來看看效果,為了簡化,我這次發(fā)布的作品不再分析矢量了,保留了坐標軸和XOY平面影格,在空中畫了一個正方形。大家請看:

頁面:點這兒參觀
源文件 (5k):3d7.zip

因為action很長,我只對3d部分做介紹,鼠標感應部分大家自己分析吧!

首先是設置初始狀態(tài),這段action加在主場境中draw3d這個mc上,因為全是用action寫的,看起來好像空mc,呵呵。

onClipEvent (load) {
    // 設置初始狀態(tài)
    this.hangle = 45;
    // hangle:視角和X軸正夾角
    this.vangle = 20;
    // vangle:視角和XOY平面夾角
}


draw3d這個mc里面分為3層,第一層goldgoat-line里面的action是goldgoat所做的畫直線程序,大家可以參看goldgoat的教程:http://m.95time.cn/doc/multimedia/flash/200201/00000284.asp。在這里大家不需要懂,會用就ok了,不再多做介紹。

第二層function是3d引擎的核心,action層是函數的調用,我們先介紹function層。

第一個函數是view3d,注釋已經很明白了,我想我需要解釋的僅僅是算法。紅色的部分是算法核心,通過空間任意一個點在在視角的坐標系投影,得到新的3維坐標,這里新的x、y就是顯示坐標,z是深度。具體這個投影公式我是怎么得到的,大家想弄明白還是自己找立體幾何,反正我也是根據原理自己算出來的。如果大家僅僅是想使用,只要會用就行了。

function view3d (view) {
    // 3d視角轉換函數,返回值是一個一維數組
    // 形參view是一個數組,view[0]、[1]、[2]分別為坐標x、y、z值
    var x1 = view[0];
    var y1 = view[1];
    var z1 = view[2];
    var hangle2 = hangle*Math.PI/180;
    var vangle2 = vangle*Math.PI/180;
    var x2 = y1*Math.cos(hangle2)-x1*Math.sin(hangle2);
    var y2 = z1*Math.cos(vangle2)-(y1*Math.sin(hangle2)+x1*Math.cos(hangle2))*Math.sin(vangle2);
    var z2 = z1*Math.sin(vangle2)+(y1*Math.sin(hangle2)+x1*Math.cos(hangle2))*Math.cos(vangle2);

    // 以上為計算部分
    var fix3d = 1000;
    x2 *= (fix3d+z2)/fix3d;
    y2 *= (fix3d+z2)/fix3d;
    view = [x2, -y2, z2];
    // 以上為視角修正部分
    return view;
    // 返回值view是一個數組,view[0]、[1]分別為現實坐標x、y值,view[2]為深度
}


第二個函數是draw3d,作用就是畫空間任兩點之間的直線,這里兩次調用了前面的view3d函數。因此顯然,這里做形參的xyzlist1、xyzlist2是原始XOYZ坐標系里的坐標。在畫線之前,先刪除以前存在的這根線。也許這樣效率不是很高,每次都要重新attachMovie執(zhí)行速度很慢,不過goldgoat沒有提供moveline的功能,我也懶得自己寫(我們在一個項目組,是有分工的)。不過也許是因為這里的影響,在我的PIII866、256M內存的機器上,最多到200條線,鼠標拖動就開始不流暢了,這對用大量線段擬合曲線是不利的,以后升級時可以考慮修改此處,不過200條線,一般也是夠用了。

function draw3d (xyzlist1, xyzlist2, linename, linecolor) {
    // 畫空間任兩點之間直線函數,無返回值
    // xyzlist1、xyzlist2為坐標數組,linename為線的名字,linecolor為線的顏色(可省略)
    xyzlist1 = view3d(xyzlist1);
    xyzlist2 = view3d(xyzlist2);
    this[linename].delete_line(linename);
    this[linename] = new line(xyzlist1[0], xyzlist1[1], xyzlist2[0], xyzlist2[1], linecolor);
}

第三個函數是drawaxis,作用是畫坐標軸,坐標軸最頭疼的地方是有個箭頭,還有一個xyz的字母,坐標軸動,箭頭指向要動,但是字母還要保持豎直,faint!所以這里面又要很唐僧的判斷直線方向,我還以為有了goldgoat的畫線,再也不用寫這個東西了呢,唉——

function drawaxis (xyzlist1, xyzlist2, axisname, axiscolor, axisdeep) {
    // 畫坐標軸函數,無返回值
    // xyzlist1為起點坐標數組,xyzlist2為終點坐標數組
    // axisname為坐標軸的名字,axiscolor為坐標軸的顏色,axisdeep坐標軸深度
    xyzlist1 = view3d(xyzlist1);
    xyzlist2 = view3d(xyzlist2);
    this["axis"+axisname].delete_line(eval("axis"+axisname));
    this["axis"+axisname] = new line(xyzlist1[0], xyzlist1[1], xyzlist2[0], xyzlist2[1], axiscolor);
    // 以上畫坐標軸軸線
    this.attachMovie("arrow", "arrow"+axisname, axisdeep);
    var mycolor = new Color(this["arrow"+axisname]);
    mycolor.setRGB(axiscolor);
    this["arrow"+axisname]._x = xyzlist2[0];
    this["arrow"+axisname]._y = xyzlist2[1];
    // 以上畫坐標軸箭頭、設置位置
    var s = 180*Math.atan((xyzlist2[1]-xyzlist1[1])/(xyzlist2[0]-xyzlist1[0]))/Math.PI;
    if ((xyzlist2[0]-xyzlist1[0])<0) {
        s += 180;
    }
    this["arrow"+axisname].arrow._rotation = s;
    this["arrow"+axisname].arrow.letter._rotation = -s;
    this["arrow"+axisname].arrow.letter.letter = axisname;
    // 以上旋轉箭頭至合適方向
}

第四個函數drawxyz,這個函數就很前面獨立的函數不太一樣了,它不是那種封裝起來可移植的。之所以寫成函數是因為嫌這些代碼太多,在action層太占地方。hoho

function drawxyz () {
    // 畫空間3軸及XOY平面函數,無參數和返回值
    for (var i = 0; i<=10; i++) {
        if (i<>5) {
            draw3d([-100+20*i, -100, 0], [-100+20*i, 100, 0], "h_line"+i, 0x999999);
        }
    }
    for (i=0; i<=10; i++) {
        if (i<>5) {
            draw3d([-100, -100+20*i, 0], [100, -100+20*i, 0], "s_line"+i, 0x999999);
        }
    }
    // 以上畫XOY平面影格
    var axisdeep = 1000;
    drawaxis([-120, 0, 0], [120, 0, 0], "x", 0xff0000, axisdeep);
    drawaxis([0, -120, 0], [0, 120, 0], "y", 0xffaa00, axisdeep+1);
    drawaxis([0, 0, 0], [0, 0, 120], "z", 0x00cc33, axisdeep+2);
    // 以上畫3坐標軸
}

function層完了,大家是不是暈了?哈哈
action層很簡單了,不再多說了。

if (oldhangle<>hangle || oldvangle<>vangle) {
    // 如果視角有變化,重畫空間
    drawxyz();
    oldhangle = hangle;
    oldvangle = vangle;
}
// 畫一個正方形,讀者可以依照格式自由發(fā)揮
draw3d([60, 60, 30], [-60, 60, 30], "line1", 0x0000ff);
draw3d([-60, 60, 30], [-60, -60, 30], "line2", 0x0000ff);
draw3d([-60, -60, 30], [60, -60, 30], "line3", 0x0000ff);
draw3d([60, -60, 30], [60, 60, 30], "line4", 0x0000ff);

春節(jié)大家大魚大肉吃的都比較多,希望大家慢慢消化!
不明白之處,我們再討論。不當之處,大家批評指正!

出處:藍色理想
責任編輯:藍色

◎進入論壇Flash專欄版塊參加討論

相關文章 更多相關鏈接
Flash 酷站獵手
中文ID3亂碼問題MX解決方案
用AS2解決中文ID3的亂碼
Flash常用效果-移動模糊效果
Flash MX 2005 制作環(huán)境預覽
作者文章
flash 顏色 action 自定義教程
用flash 5 action 制作3d效果
關鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設計比賽 網頁制作 web標準 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大!熬•自然”設計大賽開啟
國際體驗設計大會7月將在京舉行
中國國防科技信息中心標志征集
云計算如何讓安全問題可控
云計算是多數企業(yè)唯一擁抱互聯網的機會
阿里行云
云手機年終巨獻,送禮標配299起
阿里巴巴CTO王堅的"云和互聯網觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機主題設計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標
數據同步算法研究
用ps作簡單的作品展示頁面
CSS定位機制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule

藍色理想版權申明:除部分特別聲明不要轉載,或者授權我站獨家播發(fā)的文章外,大家可以自由轉載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權歸我站和作者共有。

轉載要求:轉載之圖片、文件,鏈接請不要盜鏈到本站,且不準打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設計作品,如需使用,請與原作者聯系,版權歸原作者所有,文章若有侵犯作者版權,請與我們聯系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內容無關的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網上道德,遵守中華人民共和國的各項有關法律法規(guī)
·承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
·本站評論管理人員有權保留或刪除其管轄評論中的任意內容
·您在本站發(fā)表的作品,本站有權在網站內轉載或引用
·參與本評論即表明您已經閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內容
網站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網站UI 設計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設計》
犀利開發(fā)—jQuery內核詳解與實踐
作品集 更多內容

雜⑦雜⑧ Gold NORMANA V2