如何?TWaver 3D色彩坡形

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   sp   

一般而言,需要實現3D物體的漸層,通常的思路就是通過2D繪製一張漸層canvas圖片作為3D對象的貼圖,這種方式是可以解決這類問題的,不過對於一般使用者而言,通過2D產生一張漸層的圖片,有一定的難度,另外如果要產生的圖片比較多,效能效率上會成為一個瓶頸,特別是漸層隨著條件在不斷變化的情況下,就需要每次繪製的時候都去產生一張漸層的canvas圖,效率極其低。

在3D中,另外一種通常的方式就是通過頂點色來實現漸層,然而這種方式對於使用者的難度更大,因為需要使用者瞭解3D底層的一些原理,同時需要對於每個物體的頂點結構有深入瞭解;儘管如此難,這種方式由於受到了頂點數量的限制,其漸層的顏色數量也受到了限制,這是不能接受的一個問題。

由此看來,3D對象實現任意漸層有一定難度。不過,有一個好訊息是,對於使用TWaver 3D的使用者而言,TWaver 3D從底層封裝了一些常用的漸層,使用者只需要調用簡單的介面,就可以實現3D物體的色彩繽紛。
如果通過TWaver 3D實現漸層,通過一個簡單的例子,就可以看出來效果:

var box, node;function load() {    box = new mono.DataBox();    var camera = new mono.PerspectiveCamera(30, 1.5, 0.1, 10000);    camera.setPosition(0, 200, 500);    var network = new mono.Network3D(box, camera, myCanvas);    var interaction = new mono.DefaultInteraction(network);    interaction.zoomSpeed = 10;    network.setInteractions([new mono.SelectionInteraction(network), interaction]);    mono.Utils.autoAdjustNetworkBounds(network, document.documentElement, ‘clientWidth‘, ‘clientHeight‘, 0, 30);    var pointLight = new mono.PointLight(0xFFFFFF, 1);    pointLight.setPosition(10000, 10000, 10000);    box.add(pointLight);    box.add(new mono.AmbientLight(0x888888));    createGradientNode();}function createGradientNode(i) {    var node = new mono.Cylinder(30, 30, 60,100);    node.setStyle(‘m.color‘, ‘orange‘);    node.setStyle(‘side.m.gradient‘, {        0 : ‘red‘,        1 : ‘orange‘    });    node.setStyle(‘top.m.gradient‘, {        0 : ‘yellow‘,        1 : ‘orange‘    });    node.setStyle(‘bottom.m.gradient‘, {        0 : ‘yellow‘,        1 : ‘red‘    });    node.setStyle(‘side.m.gradientType‘, 2);    node.setStyle(‘top.m.gradientType‘, 5);    node.setStyle(‘bottom.m.gradientType‘, 5);    box.add(node);}function randomSeverity() {    var severities = mono.AlarmSeverity.severities;    return severities.get(randomInt(severities.size()));};function randomInt(n) {    return Math.floor(Math.random() * n);};

 

其中設定節點漸層的代碼如下,其中對圓柱體的top,side,bottom 3個面都設定了漸層,top,bottom設定了radial 漸層,side設定了linear漸層:

node.setStyle(‘side.m.gradient‘, {                    0 : ‘red‘,                    1 : ‘orange‘                });                node.setStyle(‘top.m.gradient‘, {                    0 : ‘yellow‘,                    1 : ‘orange‘                });                node.setStyle(‘bottom.m.gradient‘, {                    0 : ‘yellow‘,                    1 : ‘red‘                });                node.setStyle(‘side.m.gradientType‘, 2);                node.setStyle(‘top.m.gradientType‘, 5);                node.setStyle(‘bottom.m.gradientType‘, 5);

 

最終的效果如下:

可以看出,使用TWaver 3D,只需要很少的代碼,就能實現效果比較炫的漸層效果。
如果你對於底層的實現比較感興趣,在此也可以順便提一下,其實底層的實現是GPU通過物體的UV座標來實現的漸層,以linear-v漸層方式為例,如果你設定了0的位置是color1 ‘red’,1 的位置是 color2 ‘orange’,那麼在任何一個點A上,假定其UV座標為u,v,其顏色就可以在GPU裡面計算得到:

finalColor = (v - 0) * color2 + (1 - v) * color1;

 


如何?TWaver 3D色彩坡形

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.