home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 39 / IOPROG_39.ISO / SOFT / sdkjava40.exe / data1.cab / fg_Samples / Samples / DirectX / d3drmviewer / Viewer.java < prev    next >
Encoding:
Java Source  |  2000-05-04  |  11.5 KB  |  457 lines

  1. //
  2. // (C) Copyright 1995 - 1999 Microsoft Corporation.  All rights reserved.
  3. //
  4. import java.awt.*;
  5. import java.awt.peer.ComponentPeer;
  6. import java.applet.*;
  7. import com.ms.com.*;
  8. import com.ms.awt.*;
  9. import com.ms.awt.peer.*;
  10. import com.ms.ui.*;
  11. import com.ms.directX.*;
  12. import java.net.URL;
  13. import java.net.MalformedURLException;
  14. import java.io.FilenameFilter;
  15. import java.io.File;
  16.  
  17.  
  18. class MenuPanel extends AwtUIHost
  19. {
  20.     ViewerCanvas vCanvas;
  21.     UICheckButton light, dither, textureFilter, enableFog;    
  22.     UIMenuList lightMenu, editMenu, objectMenu, renderMenu, shadeMenu, paletteMenu, fogMenu;
  23.     UIMenuButton lightButton, editButton, objectButton, renderButton, shadeButton, paletteButton, fogButton;
  24.     UIPushButton delete;
  25.     UIRadioButton solid, points, wireframe, flat, gouraud, phong, rgb, ramp;
  26.     UIText cut, copy, paste, fogText, directional, parpoint, point, spot, MSLogo, egg, teapot, sphere, castle;
  27.  
  28.     UISlider fogSlider;
  29.     UIBand menuBand;
  30.  
  31.     //////////////////////////////////////////////////////////////////////////
  32.     MenuPanel(boolean Standalone)
  33.     {
  34.         setLayout(new UIFlowLayout(0));
  35.  
  36.         menuBand = new UIBand();
  37.  
  38.         light = new UICheckButton("Lighting");
  39.         light.setChecked(true);
  40.         menuBand.add(light);
  41.  
  42.         lightMenu = new UIMenuList();
  43.         directional = new UIText("Directional");
  44.         parpoint = new UIText("Parallel Point");
  45.         point = new UIText("Point");
  46.         spot = new UIText("Spot");
  47.  
  48.         lightMenu.add(directional);
  49.         lightMenu.add(parpoint);
  50.         lightMenu.add(point);
  51.         lightMenu.add(spot);
  52.  
  53.         lightButton = new UIMenuButton("Add Light", 0, lightMenu);
  54.  
  55.         menuBand.add(lightButton);
  56.  
  57.         objectMenu = new UIMenuList();
  58.  
  59.         MSLogo = new UIText("MSLogo");
  60.         egg = new UIText("Egg");
  61.         teapot = new UIText("Teapot");
  62.         sphere = new UIText("Sphere");
  63.         castle = new UIText("Castle");
  64.  
  65.         objectMenu.add(MSLogo);
  66.         objectMenu.add(egg);
  67.         objectMenu.add(teapot);
  68.         objectMenu.add(sphere);
  69.         objectMenu.add(castle);
  70.         objectButton = new UIMenuButton("Add Model", 0, objectMenu);
  71.         menuBand.add(objectButton);
  72.         
  73.         
  74.         delete = new UIPushButton("Delete Model", UIPushButton.RAISED);
  75.         menuBand.add(delete);
  76.  
  77.         editMenu = new UIMenuList();
  78.  
  79.         cut = new UIText("Cut", UIText.LEFT);
  80.         copy = new UIText("Copy", UIText.LEFT);
  81.         paste = new UIText("Paste", UIText.LEFT);
  82.  
  83.         editMenu.add(cut);
  84.         editMenu.add(copy);
  85.         editMenu.add(paste);
  86.  
  87.         editButton = new UIMenuButton("Edit", 0, editMenu);
  88.  
  89.         menuBand.add(editButton);
  90.  
  91.         
  92.         
  93.         renderMenu = new UIMenuList();
  94.  
  95.         solid = new UIRadioButton("Solid");
  96.         points = new UIRadioButton("Points");
  97.         wireframe = new UIRadioButton("Wireframe");
  98.         solid.setChecked(true);
  99.  
  100.         renderMenu.add(solid);
  101.         renderMenu.add(points);
  102.         renderMenu.add(wireframe);
  103.  
  104.         renderButton = new UIMenuButton("Style", 0, renderMenu);
  105.         menuBand.add(renderButton);
  106.  
  107.         shadeMenu = new UIMenuList();
  108.  
  109.         flat = new UIRadioButton("Flat");
  110.         gouraud = new UIRadioButton("Gouraud");
  111.         phong = new UIRadioButton("Phong");
  112.         flat.setChecked(true);
  113.  
  114.         shadeMenu.add(flat);
  115.         shadeMenu.add(gouraud);
  116.         shadeMenu.add(phong);
  117.  
  118.         shadeButton = new UIMenuButton("Shading", 0, shadeMenu);
  119.         menuBand.add(shadeButton);
  120.  
  121.         paletteMenu = new UIMenuList();
  122.  
  123.         rgb = new UIRadioButton("RGB Mode");
  124.         ramp = new UIRadioButton("Ramp Mode");
  125.  
  126.         paletteMenu.add(rgb);
  127.         paletteMenu.add(ramp);
  128.  
  129.         paletteButton = new UIMenuButton("Color Mode", 0, paletteMenu);
  130.         menuBand.add(paletteButton);
  131.  
  132.         fogMenu = new UIMenuList();
  133.         enableFog = new UICheckButton("Enable Fog");
  134.         enableFog.setChecked(false);
  135.         
  136.         fogSlider = new UISlider();
  137.         fogSlider.setEnabled(false);
  138.         fogSlider.setXPosition(6);
  139.  
  140.         fogMenu.add(enableFog);
  141.         fogMenu.add(new UILine());
  142.         
  143.         fogText = new UIText("Fog Intensity");
  144.         fogText.setEnabled(false);
  145.  
  146.         fogMenu.add(fogText);
  147.         fogMenu.add(fogSlider);
  148.         
  149.         fogButton = new UIMenuButton("Fog", 0, fogMenu);
  150.         menuBand.add(fogButton);
  151.  
  152.         dither = new UICheckButton("Dithering");
  153.         menuBand.add(dither);
  154.  
  155.         textureFilter = new UICheckButton("Texture Filtering");
  156.         menuBand.add(textureFilter);
  157.         
  158.         add(menuBand);
  159.     }
  160.  
  161.     //////////////////////////////////////////////////////////////////////////
  162.     public void CheckMenuItem(int id, boolean check  )
  163.     {
  164.         if ( id == vCanvas.MENU_QUALITY_LIGHTING )
  165.         {
  166.             light.setChecked(check);
  167.             lightButton.setEnabled(check);
  168.         }
  169.     
  170.         else if ( id == vCanvas.MENU_QUALITY_POINTS )
  171.         {
  172.             points.setChecked(check);
  173.             wireframe.setChecked(!check);
  174.             solid.setChecked(!check);
  175.         }
  176.         else if ( id == vCanvas.MENU_QUALITY_WIREFRAME )
  177.         {
  178.             wireframe.setChecked(check);
  179.             points.setChecked(!check);
  180.             solid.setChecked(!check);
  181.         }
  182.         else if ( id == vCanvas.MENU_QUALITY_SOLID )
  183.         {
  184.             solid.setChecked(check);
  185.             points.setChecked(!check);
  186.             wireframe.setChecked(!check);
  187.         }
  188.         else if ( id == vCanvas.MENU_QUALITY_FLAT )
  189.         {
  190.             flat.setChecked(check);
  191.             gouraud.setChecked(!check);
  192.             phong.setChecked(!check);
  193.         }
  194.         else if ( id == vCanvas.MENU_QUALITY_GOURAUD )
  195.         {
  196.             gouraud.setChecked(check);
  197.             flat.setChecked(!check);
  198.             phong.setChecked(!check);
  199.         }
  200.         else if ( id == vCanvas.MENU_QUALITY_PHONG )
  201.         {
  202.             phong.setChecked(check);
  203.             flat.setChecked(!check);
  204.             gouraud.setChecked(!check);
  205.         }
  206.         else if ( id == vCanvas.MENU_DITHER )
  207.         {
  208.             dither.setChecked(check);
  209.         }
  210.         else if ( id == vCanvas.MENU_TEXTURE_FILTERING )
  211.         {
  212.             textureFilter.setChecked(check);
  213.         }
  214.         else if ( id == vCanvas.MENU_MODEL_MONO )
  215.         {
  216.             ramp.setChecked(check);
  217.             rgb.setChecked(!check);
  218.         }
  219.         else if ( id == vCanvas.MENU_MODEL_RGB )
  220.         {
  221.             rgb.setChecked(check);
  222.             ramp.setChecked(!check);
  223.         }
  224.         else if (id == vCanvas.MENU_FOG_ENABLE)
  225.         {
  226.             enableFog.setChecked(check);
  227.             fogSlider.setEnabled(check);
  228.             fogText.setEnabled(check);
  229.         }
  230.     }
  231.     
  232.     //////////////////////////////////////////////////////////////////////////
  233.     public void attachViewer(ViewerCanvas vCanvas)
  234.     {
  235.         this.vCanvas = vCanvas;
  236.         vCanvas.attachMenu(this);
  237.     }
  238.  
  239.     //////////////////////////////////////////////////////////////////////////
  240.     public boolean action(Event e, Object arg)
  241.     {
  242.         int id = 0;
  243.         if (arg == directional)
  244.             id = vCanvas.MENU_LIGHT_DIRECTIONAL;
  245.         else if ( arg == parpoint )
  246.             id = vCanvas.MENU_LIGHT_PARALLEL_POINT;
  247.         else if ( arg == point )
  248.             id = vCanvas.MENU_LIGHT_POINT;
  249.         else if ( arg == spot )
  250.             id = vCanvas.MENU_LIGHT_SPOT;
  251.         else if (arg == cut)
  252.             id = vCanvas.MENU_EDIT_CUT;
  253.         else if (arg == copy)
  254.             id = vCanvas.MENU_EDIT_COPY;
  255.         else if (arg == paste)
  256.             id = vCanvas.MENU_EDIT_PASTE;
  257.         else if ( arg == delete )
  258.                id = vCanvas.MENU_EDIT_DELETE;
  259.         else if ( arg == objectButton )
  260.                id = vCanvas.MENU_FILE_OPEN;
  261.         else if ( arg == light )
  262.             id = vCanvas.MENU_QUALITY_LIGHTING;
  263.         else if ( arg == points )
  264.             id = vCanvas.MENU_QUALITY_POINTS;
  265.         else if ( arg == wireframe )
  266.             id = vCanvas.MENU_QUALITY_WIREFRAME;         
  267.         else if ( arg == solid )
  268.             id = vCanvas.MENU_QUALITY_SOLID;
  269.         else if ( arg == flat )
  270.             id = vCanvas.MENU_QUALITY_FLAT;
  271.         else if ( arg == gouraud )
  272.             id = vCanvas.MENU_QUALITY_GOURAUD; 
  273.         else if ( arg == phong )
  274.             id = vCanvas.MENU_QUALITY_PHONG;
  275.         else if ( arg == dither )
  276.             id = vCanvas.MENU_DITHER;
  277.         else if ( arg == textureFilter )
  278.             id = vCanvas.MENU_TEXTURE_FILTERING;
  279.         else if ( arg == ramp )
  280.             id = vCanvas.MENU_MODEL_MONO;
  281.         else if ( arg == rgb )
  282.             id = vCanvas.MENU_MODEL_RGB;
  283.         else if ( arg == enableFog )
  284.             id = vCanvas.MENU_FOG_ENABLE;
  285.         else if (arg == fogSlider)
  286.         {
  287.             float x = (float)fogSlider.getXPosition();
  288.  
  289.             vCanvas.setFog(1, 0, 5.0f, 5.0f + (25.0f * (1.0f-(x/10.0f))), 0.0f);
  290.             
  291.             return true;
  292.         }
  293.         else if (arg == MSLogo)
  294.             vCanvas.LoadMesh("mslogo.x");
  295.         else if (arg == egg)
  296.             vCanvas.LoadMesh("egg.x");
  297.         else if (arg == teapot)
  298.             vCanvas.LoadMesh("teapot.x");
  299.         else if (arg == sphere)
  300.             vCanvas.LoadMesh("sphere2.x");
  301.         else if (arg == castle)
  302.             vCanvas.LoadFrameHierarchy("castle.x");
  303.  
  304.         return vCanvas.MenuAction(id);
  305.     }
  306. }
  307.  
  308. public class Viewer extends Applet implements Runnable, DirectXConstants
  309. {
  310.     ViewerFrame        frame;
  311.     ViewerCanvas    ViewerCanvas;
  312.     MenuPanel        menu;
  313.     boolean            Standalone = false;
  314.     boolean            running = true;
  315.     Thread            t; 
  316.     boolean            rebuilddevice;
  317.     int                model;
  318.     int                width;
  319.     int                height;
  320.  
  321.     ////////////////////////////////////////////////////////////////////////////
  322.     public static void main(String args[])
  323.     {
  324.         ViewerFrame frame = new ViewerFrame("Direct3D Retained Mode Sample");
  325.         BorderLayout bl   = new BorderLayout();
  326.         Viewer applet      = new Viewer();
  327.  
  328.         //-----------------------------------------------------------------------
  329.         // Must show Frame before we size it so insets() will return valid values
  330.         frame.show();
  331.         frame.setVisible(false);
  332.         frame.setResizable(false);
  333.         frame.setLayout(bl);
  334.         frame.add("Center", applet);
  335.  
  336.         applet.Standalone = true;
  337.         applet.frame = frame;
  338.  
  339.         applet.init();
  340.  
  341.         Dimension d = bl.preferredLayoutSize(frame);
  342.  
  343.         frame.setSize(d.width, d.height);
  344.         frame.show();
  345.  
  346.         applet.start();
  347.     }
  348.  
  349.     //////////////////////////////////////////////////////////////////////////
  350.     public void init()
  351.     {
  352.         BorderLayout bl = new BorderLayout();
  353.         setLayout(bl);
  354.  
  355.         ViewerCanvas = new ViewerCanvas("Direct 3D Retained Mode for Java", this);
  356.         menu = new MenuPanel(Standalone);
  357.         menu.attachViewer(ViewerCanvas);
  358.  
  359.         add("Center", ViewerCanvas);
  360.         add("North", menu);
  361.  
  362.         show();
  363.  
  364.         Dimension d = bl.preferredLayoutSize(this);
  365.         resize(d.width, d.height);
  366.  
  367.         requestFocus();
  368.     }
  369.  
  370.     //////////////////////////////////////////////////////////////////////////
  371.     public String getFileName(String rawFileName)
  372.     {
  373.         String file;
  374.         URL url = null;
  375.  
  376.         if ( Standalone == false )
  377.             url = getCodeBase();
  378.  
  379.         if ( url != null )    
  380.         {
  381.             file = url.toString();
  382.             file = file.substring(6);
  383.             file = file.replace('/','\\');
  384.  
  385.             // This is a check for when running under appeletviewer 
  386.             // it put a '.' at the end of path 
  387.             if ( file.endsWith("\\.") )
  388.             {
  389.                 int index = file.lastIndexOf('.');
  390.                 file = file.substring(0,index);
  391.             }
  392.  
  393.             file = file.concat(rawFileName);
  394.         }
  395.         else
  396.             file = new String(rawFileName);
  397.  
  398.         return file;
  399.     }
  400.  
  401.     //////////////////////////////////////////////////////////////////////////
  402.     public void start()
  403.     {
  404.         if ( ViewerCanvas != null )
  405.             ViewerCanvas.startDirect();
  406.  
  407.         requestFocus();
  408.  
  409.         running = true;
  410.         t = new Thread(this);
  411.         t.start();
  412.     }
  413.  
  414.     //////////////////////////////////////////////////////////////////////////
  415.     public void stop()
  416.     {
  417.         running = false;
  418.         t.stop();
  419.     }
  420.  
  421.     //////////////////////////////////////////////////////////////////////////
  422.     public void run()
  423.     {
  424.         while(running)
  425.         {
  426.             ViewerCanvas.Render();
  427.  
  428.             if ( rebuilddevice )
  429.             {
  430.                 rebuilddevice = false;
  431.                 ViewerCanvas.RebuildDevice(model, width, height);
  432.             }
  433.         }
  434.  
  435.         ViewerCanvas.mat            = null;
  436.         ViewerCanvas.light            = null;
  437.         ViewerCanvas.light2            = null;
  438.         ViewerCanvas.light1            = null;
  439.         ViewerCanvas.camera            = null;
  440.         ViewerCanvas.scene            = null;
  441.         ViewerCanvas.mainframe        = null;
  442.         ViewerCanvas.view            = null;
  443.         ViewerCanvas.dev            = null;
  444.         ViewerCanvas.D3DDevice        = null;
  445.         ViewerCanvas.D3D            = null;
  446.         ViewerCanvas.DDPal            = null;
  447.         ViewerCanvas.ddclipper        = null;
  448.         ViewerCanvas.DDSZBuffer        = null;
  449.         ViewerCanvas.ddsOffscreen    = null;
  450.         ViewerCanvas.ddsPrimary        = null;
  451.         ViewerCanvas.d3drm            = null;
  452.         ViewerCanvas.DD                = null;
  453.         ViewerCanvas.sel.d3drm        = null;
  454.         ViewerCanvas                = null;
  455.     }
  456. }
  457.