home *** CD-ROM | disk | FTP | other *** search
/ NEXT Generation 27 / NEXT27.iso / pc / demos / emperor / dx3.exe / SDK / SAMPLES / TEX1 / TEX1.C < prev    next >
C/C++ Source or Header  |  1996-08-28  |  5KB  |  136 lines

  1. /*==========================================================================
  2.  *
  3.  *  Copyright (C) 1995, 1996 Microsoft Corporation. All Rights Reserved.
  4.  *
  5.  *  File: tex1.c
  6.  *
  7.  ***************************************************************************/
  8.  
  9. /*
  10.  * A texture mapping example using a cylindrical mapping.
  11.  */
  12.  
  13. #include "rmdemo.h"
  14.  
  15. BOOL
  16. BuildScene(LPDIRECT3DRMDEVICE dev, LPDIRECT3DRMVIEWPORT view,
  17.            LPDIRECT3DRMFRAME scene, LPDIRECT3DRMFRAME camera)
  18. {
  19.     LPDIRECT3DRMMESH mesh = NULL;
  20.     LPDIRECT3DRMMESHBUILDER builder = NULL;
  21.     LPDIRECT3DRMFRAME frame = NULL;
  22.     LPDIRECT3DRMTEXTURE tex = NULL;
  23.     LPDIRECT3DRMMATERIAL mat = NULL;
  24.     LPDIRECT3DRMWRAP wrap = NULL;
  25.     LPDIRECT3DRMLIGHT l1 = NULL;
  26.     LPDIRECT3DRMLIGHT l2 = NULL;
  27.     D3DRMBOX box;
  28.     D3DVALUE miny, maxy;
  29.     D3DVALUE height;
  30.     HRESULT rval;
  31.  
  32.     dev;
  33.     view;
  34.     camera;
  35.  
  36.     if (FAILED(lpD3DRM->lpVtbl->CreateLightRGB(lpD3DRM, D3DRMLIGHT_AMBIENT, D3DVAL(0.2),
  37.                                   D3DVAL(0.2), D3DVAL(0.2), &l1)))
  38.                                   goto generic_error;
  39.     if (FAILED(scene->lpVtbl->AddLight(scene, l1)))
  40.         goto generic_error;
  41.     if (FAILED(lpD3DRM->lpVtbl->CreateFrame(lpD3DRM, scene, &frame)))
  42.         goto generic_error;
  43.     if (FAILED(frame->lpVtbl->SetOrientation(frame, scene, -D3DVAL(1), -D3DVAL(1),
  44.                                   D3DVAL(1), D3DVAL(0), D3DVAL(1), D3DVAL(0))))
  45.                                   goto generic_error;
  46.     if (FAILED(lpD3DRM->lpVtbl->CreateLightRGB(lpD3DRM, D3DRMLIGHT_DIRECTIONAL, D3DVAL(1),
  47.                                   D3DVAL(1), D3DVAL(1), &l2)))
  48.                                   goto generic_error;
  49.     if (FAILED(frame->lpVtbl->AddLight(frame, l2)))
  50.         goto generic_error;
  51.     RELEASE(frame);
  52.  
  53.     if (FAILED(lpD3DRM->lpVtbl->CreateFrame(lpD3DRM, scene, &frame)))
  54.         goto generic_error;
  55.     if (FAILED(frame->lpVtbl->SetPosition(frame, scene, D3DVAL(0), D3DVAL(0), D3DVAL(15))))
  56.         goto generic_error;
  57.     if (FAILED(frame->lpVtbl->SetRotation(frame, scene, D3DVAL(1.1), D3DVAL(0.3), 
  58.                                D3DVAL(0.0), D3DVAL(0.04))))
  59.                                goto generic_error;
  60.  
  61.     if (FAILED(lpD3DRM->lpVtbl->CreateMeshBuilder(lpD3DRM, &builder)))
  62.         goto generic_error;
  63.     rval = builder->lpVtbl->Load(builder, "sphere4.x", NULL,
  64.                         D3DRMLOAD_FROMFILE, NULL, NULL);
  65.     if (rval != D3DRM_OK) {
  66.         Msg("Failed to load sphere4.x.\n%s", D3DRMErrorToString(rval));
  67.         goto ret_with_error;
  68.     }
  69.  
  70.     rval = lpD3DRM->lpVtbl->LoadTexture(lpD3DRM, "tex7.ppm", &tex);
  71.     if (rval != D3DRM_OK) {
  72.         Msg("Failed to load tex7.ppm.\n%s", D3DRMErrorToString(rval));
  73.         goto ret_with_error;
  74.     }
  75.     if (FAILED(lpD3DRM->lpVtbl->CreateMaterial(lpD3DRM, D3DVAL(10.0), &mat)))
  76.         goto generic_error;
  77.  
  78.     if (FAILED(builder->lpVtbl->SetTexture(builder, tex)))
  79.         goto generic_error;
  80.     if (FAILED(builder->lpVtbl->SetMaterial(builder, mat)))
  81.         goto generic_error;
  82.     if (FAILED(builder->lpVtbl->SetColorRGB(builder, D3DVAL(1.0), D3DVAL(1.0), D3DVAL(1.0))))
  83.         goto generic_error;
  84.  
  85.     if (FAILED(builder->lpVtbl->CreateMesh(builder, &mesh)))
  86.         goto generic_error;
  87.     RELEASE(builder);
  88.  
  89.     if (FAILED(mesh->lpVtbl->GetBox(mesh, &box)))
  90.         goto generic_error;
  91.     maxy = box.max.y;
  92.     miny = box.min.y;
  93.     height = maxy - miny;
  94.  
  95.     if (FAILED(lpD3DRM->lpVtbl->CreateWrap(lpD3DRM, D3DRMWRAP_CYLINDER, NULL, D3DVAL(0.0),
  96.                               D3DVAL(0.0), D3DVAL(0.0), D3DVAL(0.0),
  97.                               D3DVAL(1.0), D3DVAL(0.0), D3DVAL(0.0),
  98.                               D3DVAL(0.0), D3DVAL(1.0), D3DVAL(0.0),
  99.                               D3DDivide(miny, height), D3DVAL(1.0),
  100.                               D3DDivide(-D3DVAL(1.0), height), &wrap)))
  101.                               goto generic_error;
  102.  
  103.     if (FAILED(wrap->lpVtbl->Apply(wrap, (LPDIRECT3DRMOBJECT)mesh)))
  104.         goto generic_error;
  105.     if (FAILED(frame->lpVtbl->AddVisual(frame, (LPDIRECT3DRMVISUAL) mesh)))
  106.         goto generic_error;
  107.  
  108.     RELEASE(frame);
  109.     RELEASE(wrap);
  110.     RELEASE(mesh);
  111.     RELEASE(tex);
  112.     RELEASE(mat);
  113.     RELEASE(l1);
  114.     RELEASE(l2);
  115.     return TRUE;
  116. generic_error:
  117.     Msg("A failure occurred while building the scene.\n");
  118. ret_with_error:
  119.     RELEASE(mesh);
  120.     RELEASE(builder);
  121.     RELEASE(frame);
  122.     RELEASE(tex);
  123.     RELEASE(mat);
  124.     RELEASE(wrap);
  125.     RELEASE(l1);
  126.     RELEASE(l2);
  127.     return FALSE;
  128. }
  129.  
  130. void
  131. OverrideDefaults(Defaults* defaults)
  132. {
  133.     defaults->bConstRenderQuality = TRUE;
  134.     lstrcpy(defaults->Name, "Texture Mapping Direct3DRM Example");
  135. }
  136.