<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    TWaver - 專注UI技術

    http://twaver.servasoft.com/
    posts - 171, comments - 191, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    TWaver 3D應用“諜報”

    Posted on 2011-03-10 12:20 TWaver 閱讀(1998) 評論(1)  編輯  收藏

    “hi,用你們TWaver能不能開發(fā)個3D的機房圖啊?”
    現(xiàn)在這句話幾乎成了客戶見我后的第二句話了,機房管理的呈現(xiàn)方式已經(jīng)走了n久了,做資源管理的兄弟們奮發(fā)拼搏,為了最終客戶的口味一次次的去加班,做模板,挖空心思去想創(chuàng)意,從經(jīng)典的表格式(很慶幸,我沒有經(jīng)歷那個年代)走到平面圖管理(圖一),


    從純平面圖走向仿3D的正視效果(圖二),


    本想已經(jīng)做到極致了,可是沒料到,萬惡的摩爾定律,萬惡的GPU,萬惡的3D游戲把最終客戶的口味充分調(diào)動了起來,現(xiàn)在居然有了機房3D實景構(gòu)建的需求。 

    在各個廠家都在關注于業(yè)務做強做精的時候,讓他們分心出來做這種效果,無論是哪一家廠商,都是一個不菲的成本項。滴水匯成海,各個廠家開始把這種需求越來越詳盡的反饋到了TWaver這邊,客戶的需求就是TWaver的責任,TWaver中國這邊迅速將需求整理匯集,發(fā)往了美國核心開發(fā)組,抓緊立項開發(fā)。經(jīng)過緊張的工作,core team已經(jīng)給我發(fā)過來了試用包,兄弟得以第一時間嘗鮮,我這里就趕緊的把這個包的特點提前披露,跟各位兄弟分享一下。
    TWaver的3D開發(fā)包命名為TWaver 3D,立足于Java、Flex、.Net、HTML5多個語言開發(fā)平臺(當然目前兄弟我還是只拿到了Java版,畢竟這個是TWaver的魂魄所屬)。這個開發(fā)包設計目標是透明化3D開發(fā),降低2D界面到3D界面的門檻,平滑轉(zhuǎn)移原來TWaver客戶項目的3D化需求;它的功能主要羅列如下:
    (1)呈現(xiàn)3D場景
    (2)內(nèi)建(built-in)常見對象的3D模型,例如Room,Node,Equipment等等
    (3)提供場景渲染接口
    (4)提供默認交互接口及實現(xiàn),例如鼠標導航,視圖縮放,實體對象的操作等等.這個功能,可以參考下面的例子
    TWaver3D 初體驗


    (5)已有模型文件的導入,例如3ds。(據(jù)我所知,此部分還在緊張進行中)
    (6)簡化用戶3D開發(fā)的代碼復雜度,支持TWaver原有平面模型的轉(zhuǎn)換。這個功能大家可以看一個我們的一個小例子視頻:
    設備平面圖映射為設備的3D模型

    對于TWaver的用戶來說,渲染效果是一方面,另一方面還得把二次開發(fā)的復雜度大大降低才行,否則他們自己成本的控制就無從談起。我第一時間收到老外的郵件的時候,他在郵件里提的最多的就是可以大大降低用戶開發(fā)的代碼量。究竟有多省,我們自己來看看


     1public static void main(String[] args) {
     2    JFrame frame = new JFrame();
     3    final TDataBox box = new TDataBox();
     4    final TNetwork3D network = new TNetwork3D(box);
     5    network.setSelectedMode(Consts3D.SELECTED_MODE_SKELEON);
     6    JPanel panel = new JPanel(new BorderLayout());
     7    panel.add(network, BorderLayout.CENTER);
     8    JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
     9    ActionListener listener = new ActionListener() {
    10        public void actionPerformed(ActionEvent e) {
    11            String command = e.getActionCommand();
    12            AbstractButton ab = (AbstractButton) e.getSource();
    13            if (ab instanceof JCheckBox) {
    14                JCheckBox s = (JCheckBox) ab;
    15                if ("show axes".equals(command)) {
    16                    network.setAxexVisible(s.isSelected());
    17                }
     else if ("show background".equals(command)) {
    18                    Color bc = ab.isSelected() ? Color.CYAN : null;
    19                    network.setBackground(bc);
    20                }
     else if ("highlight".equals(command)) {
    21                    int mode = ab.isSelected() ? Consts3D.SELECTED_MODE_HIGHLIGHT : Consts3D.SELECTED_MODE_SKELEON;
    22                    network.setSelectedMode(mode);
    23                }

    24            }
     else {
    25            }

    26        }

    27    }
    ;
    28    controlPanel.add(createButton(0"show axes", listener));
    29    controlPanel.add(createButton(0"show background", listener));
    30    controlPanel.add(createButton(0"highlight", listener));
    31    panel.add(controlPanel, BorderLayout.SOUTH);
    32    frame.setContentPane(panel);
    33    frame.setSize(1024700);
    34    frame.setVisible(true);
    35    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    36    frame.setLocationRelativeTo(null);
    37    javax.swing.SwingUtilities.invokeLater(new Runnable() {
    38        public void run() {
    39                               //build the 3D scene
    40            Room room = new Room();
    41            Utils3D.setLocation(room, 000);
    42            Utils3D.setSize(room, 15212);
    43            box.addElement(room);
    44            double startx = -6.2;
    45            double starty = -5;
    46            double colStep = 1.3;
    47            double rowStep = 2;
    48            double length = 0.8;
    49            double height = 1.8;
    50            double depth = length;
    51            for (int col = 0; col < 10; col++{
    52                for (int row = 0; row < 6; row++{
    53                    Rack chassis = new Rack();
    54                    Utils3D.setLocation(chassis, startx + col * colStep,
    55                                                                          starty + row * rowStep, 0);
    56                    Utils3D.setSize(chassis, length, height, depth);
    57                    box.addElement(chassis);
    58                }

    59            }

    60        }

    61    }
    );
    62}

    63public static AbstractButton createButton(int type, String command, ActionListener listener) {
    64    AbstractButton button = null;
    65    if (type == 0{
    66        button = new JCheckBox(command);
    67    }
     else {
    68        button = new JButton(command);
    69    }

    70    button.addActionListener(listener);
    71    return button;
    72}


    這段代碼除了界面布局、ActionListener處理、以及Swing對象的構(gòu)建之外,就只剩下12行做機房模型的代碼了。大家想知道這點代碼能做到什么效果嗎,請看
    快速搭建3D機房實景


    評論

    # re: TWaver 3D應用“諜報”  回復  更多評論   

    2011-03-10 13:35 by 日月雨林@gmail.com
    這個很強悍啊!

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲精品无码久久久久久久 | 国产免费观看黄AV片| 亚洲AV日韩综合一区| 亚洲真人无码永久在线| 国产成人精品久久免费动漫| 国产AV无码专区亚洲AV琪琪 | 边摸边吃奶边做爽免费视频网站| 久久夜色精品国产亚洲AV动态图| 久久久久久国产精品免费免费| 亚州**色毛片免费观看| 亚洲精品偷拍无码不卡av| 男人的天堂亚洲一区二区三区 | 立即播放免费毛片一级| 亚洲精品乱码久久久久久中文字幕| 无码精品A∨在线观看免费| 日韩在线视频播放免费视频完整版 | a级毛片免费高清毛片视频| ASS亚洲熟妇毛茸茸PICS| 一本色道久久综合亚洲精品高清 | 亚洲精品和日本精品| 久久国产乱子伦免费精品| 免费无码国产V片在线观看| 亚洲日本在线播放| 国产亚洲精品国看不卡| 成年性生交大片免费看| 日本视频免费高清一本18| 偷自拍亚洲视频在线观看 | 中文字幕久精品免费视频| 美女免费视频一区二区三区| 91精品国产亚洲爽啪在线影院 | 久久夜色精品国产亚洲| 亚洲成av人片天堂网老年人 | 国产成人亚洲综合无码精品| 四虎1515hm免费国产| 日本高清在线免费| 性xxxxx大片免费视频| 抽搐一进一出gif免费视频| 亚洲AV无码专区在线厂| 亚洲中文字幕AV每天更新| 亚洲女人影院想要爱| 亚洲av午夜成人片精品网站|