简单的3D演示源程序

    技术2022-05-11  145

    //uaiiadx.h

    #include "stdafx.h"#include <ddraw.h>#include <d3d.h>// TODO: reference any additional headers you need in STDAFX.H// and not in this file#pragma message("linking with Microsoft's DirectX library ...")#pragma comment(lib, "ddraw.lib")#pragma comment(lib, "dxguid.lib")

    class UAIIADX{public: LPDIRECT3D     lpD3D; LPDIRECTDRAW4    lpDD; LPDIRECTDRAWSURFACE4  lpDDSPrimary; LPDIRECTDRAWSURFACE4  lpDDSBack; LPTSTR      lpBuffer;

     int       nlPitch; int       dwWidth; int       dwHeight; int       dwScreenWidth; int       dwScreenHeight; int       dwScreenColor;public:      UAIIADX   ();      ~UAIIADX  (); BOOL    Init   ( HWND hWnd = GetActiveWindow() ); BOOL    Init   ( int , int , HWND hWnd = GetActiveWindow() ); BOOL    InitDDraw  ( HWND ); void    FreeDDraw  ( void ); BOOL    Text   ( int , int , COLORREF , COLORREF , LPTSTR , ... ); BOOL    Lock   ( COLORREF ); BOOL    Lock   ( void ); BOOL    UnLock   ( void ); BOOL    Backup   ( void ); BOOL    Restore   ( void ); BOOL    Fill   ( COLORREF ); inline COLORREF GetPixel  ( int , int ); inline COLORREF GetPixel  ( POINT ); inline void  SetPixel  ( int , int , COLORREF ); inline void  SetPixel  ( POINT , COLORREF ); void    DrawLine  ( int , int , int , int , COLORREF ); void    DrawLine  ( POINT , POINT , COLORREF ); };

     

    //uaiia3d.h

    #include "stdafx.h"#include "uaiiaDX.h"

    #define M_PAI        0.01745329251994329577

    class UAIIA3D{ typedef struct _tag_POINT3D{  int  x;    int  y;   int  z;   int  tx;    int  ty;   int  tz;   POINT pt; } POINT3D; typedef struct _tag_POINT2X{  DWORD  start;    DWORD  end;  } POINT2X;public: UAIIADX      *lpDX; POINT3D      *lpPoint; POINT2X      *lpLine; DWORD      dwPoint,dwLine; DWORD      dwMaxPoint,dwMaxLine;public:    UAIIA3D   ();    ~UAIIA3D  (); void  Bind   ( UAIIADX* ); DWORD  SetPoint  ( int , int , int ); DWORD  SetPoint  ( POINT3D ); BOOL  SetLine   ( int , int , int , int , int , int ); BOOL  SetLine   ( POINT3D , POINT3D ); BOOL  SetBox   ( int , int , int , int , int , int ); BOOL  FillBox   ( int , int , int , int , int , int ); BOOL  SetAre   ( int , int , int , int , int n = 17 ); void  Draw   ( COLORREF rgb = RGB(0,0,0) ); void  Run3D   ( int x = 0 , int y = 0 , int z = 0 , double a = 0 , double b = 0 , double c = 0 ); void  Run2D   ( int x = 0 , int y = 0 , int z = 0 , double a = 0 , double b = 0 , double c = 0 );};

     

    //uaiiadx.cpp

    #include "stdafx.h"#include "uaiiaDX.h"

    UAIIADX::UAIIADX(){  dwScreenWidth  = 800; dwScreenHeight  = 600;}

    UAIIADX::~UAIIADX(){  FreeDDraw();}

    BOOL UAIIADX::Init( HWND hWnd ){ if ( !InitDDraw( hWnd )){  MessageBox( hWnd , "初始化DirectDraw过程中出错!", "Error", MB_OK );  FreeDDraw();  return FALSE; } return TRUE;}

    BOOL UAIIADX::Init( int x , int y , HWND hWnd ){ dwScreenWidth  = x; dwScreenHeight  = y; return Init();}BOOL UAIIADX::InitDDraw( HWND hWnd ){ DDSURFACEDESC2             ddsd; LPDIRECTDRAW               pDD; DDSCAPS2       ddsCaps;  if ( DirectDrawCreate( NULL, &pDD, NULL ) != DD_OK )   return FALSE;    if ( pDD->SetCooperativeLevel( hWnd,                    DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) != DD_OK)        return FALSE; if ( pDD->SetDisplayMode( dwScreenWidth, dwScreenHeight, 32 ) != DD_OK)   return FALSE; if ( pDD->QueryInterface ( IID_IDirectDraw4, (LPVOID *) & lpDD) != DD_OK)  return false; if (pDD->QueryInterface( IID_IDirect3D, (LPVOID*) &lpD3D) != DD_OK)  return FALSE;     UpdateWindow( hWnd );

     ZeroMemory( &ddsd, sizeof(ddsd) ); ddsd.dwSize            = sizeof(ddsd); ddsd.dwFlags           = DDSD_BACKBUFFERCOUNT | DDSD_CAPS; ddsd.dwBackBufferCount = 1; ddsd.ddsCaps.dwCaps    = DDSCAPS_COMPLEX | DDSCAPS_FLIP | DDSCAPS_PRIMARYSURFACE; if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)        return FALSE;    ZeroMemory( &ddsCaps, sizeof(ddsCaps) ); ddsCaps.dwCaps     = DDSCAPS_BACKBUFFER; if( lpDDSPrimary->GetAttachedSurface( &ddsCaps,&lpDDSBack ) != DD_OK )    return FALSE; /* ZeroMemory ( &ddsd, sizeof ( ddsd ) );    ddsd.dwSize       = sizeof( ddsd );    ddsd.dwFlags      = DDSD_CAPS;    ddsd.ddsCaps.dwCaps     = DDSCAPS_PRIMARYSURFACE|DDSCAPS_VIDEOMEMORY; if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)        return FALSE;

     ZeroMemory ( &ddsd, sizeof ( ddsd ) );    ddsd.dwSize       = sizeof ( ddsd );   ddsd.dwFlags      = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;   ddsd.ddsCaps.dwCaps     = DDSCAPS_OFFSCREENPLAIN|DDSCAPS_VIDEOMEMORY; ddsd.dwHeight      = dwScreenHeight; ddsd.dwWidth      = dwScreenWidth;    if ( lpDD->CreateSurface( &ddsd, &lpDDSBack, NULL ) != DD_OK)        return FALSE; /**/    return TRUE;} void UAIIADX::FreeDDraw( void ){    if( lpDD != NULL ){        if( lpDDSPrimary != NULL ){            lpDDSPrimary->Release();            lpDDSPrimary = NULL;        }        lpDD->Release();        lpDD = NULL;    }}BOOL UAIIADX::Text( int x , int y , COLORREF col , COLORREF bkcol , LPTSTR str , ... ){    char Buffer[300]; HDC  hdc; va_list _list;    va_start ( _list , str );  wvsprintf(Buffer,str,_list); if ( lpDDSPrimary->GetDC(&hdc) != DD_OK)  return FALSE;     SetTextColor( hdc, col ); ::SetBkColor( hdc, bkcol );    TextOut( hdc, x, y, Buffer, lstrlen(Buffer));    lpDDSPrimary->ReleaseDC(hdc); return TRUE;}BOOL UAIIADX::Lock( void ){  DDSURFACEDESC2   ddsd; //while(lpDDSBack->GetFlipStatus(DDGFS_ISFLIPDONE) == DDERR_WASSTILLDRAWING);  ZeroMemory ( &ddsd, sizeof ( ddsd ) ); ddsd.dwSize = sizeof ( ddsd ); switch ( lpDDSBack->Lock ( NULL , &ddsd ,  DDLOCK_READONLY|DDLOCK_WAIT , NULL) ){  case DD_OK:   lpBuffer = (LPTSTR)ddsd.lpSurface;   nlPitch  = ddsd.lPitch;   dwWidth  = ddsd.dwWidth;   dwHeight = ddsd.dwHeight;   return TRUE;  case DDERR_INVALIDOBJECT:  case DDERR_INVALIDPARAMS:  case DDERR_OUTOFMEMORY:  case DDERR_SURFACEBUSY:  case DDERR_SURFACELOST:   lpDDSBack->Restore();   break;  case DDERR_WASSTILLDRAWING:   break;  default:   break; } if ( lpDDSBack->IsLost() )  lpDDSBack->Restore(); return FALSE;}BOOL UAIIADX::Lock( COLORREF rgb ){ DDBLTFX     ddbltfx;  ddbltfx.dwSize   = sizeof(ddbltfx);  ddbltfx.dwFillColor  = rgb;  if ( lpDDSBack->Blt(NULL,NULL, NULL,DDBLT_COLORFILL, &ddbltfx) != DD_OK )  return FALSE; return Lock();}BOOL UAIIADX::UnLock( void ){ lpDDSBack->Unlock( NULL ); lpDDSPrimary->Flip( NULL, DDFLIP_WAIT ); /* RECT rt; rt.left = 0; rt.top = 0; rt.right = dwScreenWidth; rt.bottom = dwScreenHeight; lpDDSBack->Unlock( NULL );  if ( lpDDSPrimary->BltFast ( 0 , 0 , lpDDSBack ,&rt , false) != DD_OK ){ //if ( lpDDSPrimary->Blt ( &rt , lpDDSBack ,&rt ,false,false) != DD_OK ){  if (lpDDSBack->IsLost())   lpDDSBack->Restore();  if (lpDDSPrimary->IsLost())   lpDDSPrimary->Restore();  return FALSE; } */ return TRUE;}BOOL UAIIADX::Backup( void ){ RECT rt; rt.left = 0; rt.top = 0; rt.right = dwScreenWidth; rt.bottom = dwScreenHeight; if ( lpDDSBack->BltFast ( 0 , 0 , lpDDSPrimary ,&rt , false) != DD_OK ){  if (lpDDSBack->IsLost())   lpDDSBack->Restore();  if (lpDDSPrimary->IsLost())   lpDDSPrimary->Restore();  return FALSE; } return TRUE;}BOOL UAIIADX::Restore( void ){ RECT rt; rt.left = 0; rt.top = 0; rt.right = dwScreenWidth; rt.bottom = dwScreenHeight; if ( lpDDSPrimary->BltFast ( 0 , 0 , lpDDSBack ,&rt , false) != DD_OK ){  if (lpDDSBack->IsLost())   lpDDSBack->Restore();  if (lpDDSPrimary->IsLost())   lpDDSPrimary->Restore();  return FALSE; } return TRUE;}

    BOOL UAIIADX::Fill ( COLORREF rgb ){ DDBLTFX     ddbltfx;  ddbltfx.dwSize   = sizeof(ddbltfx);  ddbltfx.dwFillColor  = rgb;  if ( lpDDSBack->Blt(NULL,NULL, NULL,DDBLT_COLORFILL, &ddbltfx) != DD_OK )  return FALSE; return TRUE;}COLORREF UAIIADX::GetPixel  ( int x, int y ){ return * ( COLORREF * )( lpBuffer + y * nlPitch + x * 4 );}COLORREF UAIIADX::GetPixel  ( POINT pt ){ return * ( COLORREF * )( lpBuffer + pt.y * nlPitch + pt.x * 4 );}void UAIIADX::SetPixel  ( int x, int y, COLORREF rgb ){ if ( x < 0 || y < 0 || x >= dwWidth || y >= dwHeight )  return; * ( COLORREF * )( lpBuffer + y * nlPitch + x * 4 ) = rgb;}void UAIIADX::SetPixel  ( POINT pt, COLORREF rgb ){ if ( pt.x < 0 || pt.y < 0 || pt.x >= dwWidth || pt.y >= dwHeight )  return; * ( COLORREF * )( lpBuffer + pt.y * nlPitch + pt.x * 4 ) = rgb;}void UAIIADX::DrawLine  ( int x , int y , int x0 , int y0 , COLORREF rgb ){ register int l,sum; int dx,dy,dm,dn,m,n,u,v,k; dx=x0-x; dy=y0-y; if(dx==0){    if(dy<0) {u=y0;v=y;}  else {u=y;v=y0;}  for(l=u;l<=v;l++)    SetPixel ( x , l , rgb );  return; } if(dy==0){  if(dx<0) {u=x0;v=x;}  else {u=x;v=x0;}  for(l=u;l<=v;l++)    SetPixel ( l , y , rgb );  return; } dm=1; dn=1; if(dx<0){ dx=-dx;dm=-1;} if(dy<0){ dy=-dy;dn=-1;} m=dx;n=dy;k=1;u=x;v=y; if(dx<dy){  m=dy;n=dx;  k=dm;dm=dn;dn=k;k=0;  u=y;v=x; } l=0;sum=m; SetPixel ( x , y , rgb ); while(sum!=0){  sum=sum-1;l=l+n;u=u+dm;  if(l>=m) {v=v+dn;l=l-m;}  if(k==1)    SetPixel ( u , v , rgb );  else    SetPixel ( v , u , rgb ); } return; }void UAIIADX::DrawLine  ( POINT pt , POINT pt0 , COLORREF rgb ){ DrawLine ( pt.x , pt.y , pt0.x , pt0.y , rgb );}

     

     

    //uaiia3d.cpp

    #include "stdafx.h"#include "uaiia3D.h"#include <stdio.h>#include <math.h>

    #define MAXMEMPOINT 50#define __FILL_LINE__ 20UAIIA3D::UAIIA3D( ){ lpDX  = NULL; dwPoint  = 0; dwLine  = 0; dwMaxPoint = MAXMEMPOINT; dwMaxLine = MAXMEMPOINT; lpPoint  = new POINT3D[dwMaxPoint]; lpLine  = new POINT2X[dwMaxLine];}UAIIA3D::~UAIIA3D(){ delete[] lpPoint; delete[] lpLine; lpPoint = NULL; lpLine = NULL;}void UAIIA3D::Bind(UAIIADX *uDX){ lpDX = uDX; Run3D(); Run2D();}DWORD UAIIA3D::SetPoint( POINT3D pt ){  for ( DWORD i = 0; i < dwPoint ; i ++ ){  if ( pt.x == lpPoint[i].x &&  pt.y == lpPoint[i].y && pt.z == lpPoint[i].z ){   return i;  } }   lpPoint[dwPoint] = pt; dwPoint++; if ( dwPoint >= dwMaxPoint-1 ){  POINT3D *lpTempPoint = lpPoint;  dwMaxPoint += MAXMEMPOINT;  lpPoint = new POINT3D[dwMaxPoint];  for ( DWORD i = 0 ; i < dwPoint ; i ++ )   lpPoint[i] = lpTempPoint[i];  delete[] lpTempPoint; } return dwPoint - 1;}DWORD UAIIA3D::SetPoint( int x , int y ,int z ){ POINT3D pt; pt.x = x; pt.y = y; pt.z = z; return SetPoint(pt);}BOOL UAIIA3D::SetLine( POINT3D pt , POINT3D pt0 ){ DWORD i,t_start,t_end; t_start = SetPoint(pt); t_end   = SetPoint(pt0); for ( i = 0 ; i < dwLine ; i ++ ){  if ( lpLine[i].start == t_start && lpLine[i].end == t_end )   return TRUE;  if ( lpLine[i].start == t_end && lpLine[i].end == t_start )   return TRUE; } lpLine[dwLine].start = t_start; lpLine[dwLine].end   = t_end; dwLine++; if ( dwLine >= dwMaxLine - 1 ){  POINT2X *lpTempPoint = lpLine;  dwMaxLine += MAXMEMPOINT;  lpLine = new POINT2X[dwMaxLine];  for ( i = 0 ; i < dwLine ; i ++ )   lpLine[i] = lpTempPoint[i];  delete[] lpTempPoint; } return TRUE;}BOOL UAIIA3D::SetLine( int x , int y , int z ,int x0 , int y0 ,int z0 ){ POINT3D pt,pt0; pt.x = x; pt.y = y; pt.z = z; pt0.x = x0; pt0.y = y0; pt0.z = z0; return SetLine(pt,pt0);}BOOL UAIIA3D::SetBox( int x , int y , int z ,int width , int height ,int lz ){ SetLine(x,y,z,x+width,y,z); SetLine(x+width,y,z,x+width,y+height,z); SetLine(x+width,y+height,z,x,y+height,z); SetLine(x,y+height,z,x,y,z);  SetLine(x,y,z+lz,x+width,y,z+lz); SetLine(x+width,y,z+lz,x+width,y+height,z+lz); SetLine(x+width,y+height,z+lz,x,y+height,z+lz); SetLine(x,y+height,z+lz,x,y,z+lz);  SetLine(x,y,z,x,y,z+lz); SetLine(x+width,y,z,x+width,y,z+lz); SetLine(x+width,y+height,z,x+width,y+height,z+lz); SetLine(x,y+height,z,x,y+height,z+lz); return TRUE;}BOOL UAIIA3D::FillBox( int x , int y , int z ,int width , int height ,int lz ){ int i; for(i=0;i<=width;i+=__FILL_LINE__){  SetLine(x+i,y,z,x+i,y+height,z);  SetLine(x+i,y,z,x+i,y,z+lz);  SetLine(x+i,y,z+lz,x+i,y+height,z+lz);  SetLine(x+i,y+height,z,x+i,y+height,z+lz); }  if (i != width){  i = width;  SetLine(x+i,y,z,x+i,y+height,z);  SetLine(x+i,y,z,x+i,y,z+lz);  SetLine(x+i,y,z+lz,x+i,y+height,z+lz);  SetLine(x+i,y+height,z,x+i,y+height,z+lz); }  for(i=0;i<=height;i+=__FILL_LINE__){  SetLine(x,y+i,z,x+width,y+i,z);  SetLine(x,y+i,z,x,y+i,z+lz);  SetLine(x,y+i,z+lz,x+width,y+i,z+lz);  SetLine(x+width,y+i,z,x+width,y+i,z+lz); } if(i!=height){  i = height;  SetLine(x,y+i,z,x+width,y+i,z);  SetLine(x,y+i,z,x,y+i,z+lz);  SetLine(x,y+i,z+lz,x+width,y+i,z+lz);  SetLine(x+width,y+i,z,x+width,y+i,z+lz); } for(i=0;i<=lz;i+=__FILL_LINE__){  SetLine(x,y,z+i,x+width,y,z+i);  SetLine(x,y,z+i,x,y+height,z+i);    SetLine(x,y+height,z+i,x+width,y+height,z+i);  SetLine(x+width,y,z+i,x+width,y+height,z+i); }  if(i!=lz){  i=lz;  SetLine(x,y,z+i,x+width,y,z+i);  SetLine(x,y,z+i,x,y+height,z+i);    SetLine(x,y+height,z+i,x+width,y+height,z+i);  SetLine(x+width,y,z+i,x+width,y+height,z+i); }  return TRUE;}BOOL UAIIA3D::SetAre( int x , int y , int z , int r , int n ){ POINT3D *xdx,*xd,x0; double  da; int     i,j; xd  = new POINT3D[n]; xdx = new POINT3D[n*n]; da = M_PAI * (double)360/(double)n; x0.x = r; x0.y = 0; x0.z = 0; for(i=0;i<n;i++){  xd[i].x = (int)(x0.y*sin(da*i)+x0.x*cos(da*i));  xd[i].y = (int)(x0.y*cos(da*i)-x0.x*sin(da*i));  xd[i].z = 0; } for(j=0;j<n;j++){  for(i=0;i<n;i++){   xdx[j*n+i].x = (int)(xd[i].z*sin(da*j)+xd[i].x*cos(da*j)+x);   xdx[j*n+i].y = xd[i].y+y;   xdx[j*n+i].z = (int)(xd[i].z*cos(da*j)-xd[i].x*sin(da*j)+z);  } } for(j=0;j<n;j++){  for(i=1;i<n;i++){   SetLine(xdx[j*n+i-1],xdx[j*n+i]);  }  SetLine(xdx[j*n+n-1],xdx[j*n]); } for(i=0;i<n;i++){  for(j=1;j<n;j++){   SetLine(xdx[(j-1)*n+i],xdx[j*n+i]);  }  SetLine(xdx[i],xdx[(n-1)*n+i]); } delete [] xd; delete [] xdx; return TRUE;}void UAIIA3D::Draw( COLORREF rgb){ if ( lpDX == NULL )  return; for ( DWORD i = 0; i < dwLine ; i ++ ){  lpDX->DrawLine( lpPoint[lpLine[i].start].pt,   lpPoint[lpLine[i].end].pt,   rgb); }}

    void UAIIA3D::Run3D( int x , int y , int z , double a , double b , double c ){ int dx,dy,dz; double da,db,dc; double SinA,SinB,SinC,CosA,CosB,CosC; double Mx1,Mx2,Mx3,My1,My2,My3,Mz1,Mz2,Mz3;  da = M_PAI * (double)a; db = M_PAI * (double)b; dc = M_PAI * (double)c;

     SinA = sin(da); SinB = sin(db); SinC = sin(dc); CosA = cos(da); CosB = cos(db); CosC = cos(dc);

     Mx1 = CosA * CosB; Mx2 =-CosA * SinB * SinC - SinA * CosC; Mx3 = SinA * SinC - CosA * SinB * CosC; My1 = SinA * CosB; My2 = CosA * CosC - SinA * SinB * SinC; My3 = SinA * SinB * CosC +  CosA * SinC; Mz1 = SinB; Mz2 = CosB * SinC; Mz3 = CosB * CosC;

     for ( DWORD i = 0; i < dwPoint ; i ++ ){  dx = lpPoint[i].x - x;  dy = lpPoint[i].y - y;  dz = lpPoint[i].z - z;         lpPoint[i].tx =  (int)(dx * Mx1 + dy * My1 + dz * Mz1 + x);  lpPoint[i].ty =  (int)(dx * Mx2 + dy * My2 + dz * Mz2 + y);     lpPoint[i].tz =  (int)(dx * Mx3 - dy * My3 + dz * Mz3 + z); }}void UAIIA3D::Run2D( int x , int y , int z , double a , double b , double c ){ int dx,dy,dz,tx,ty,tz; double da,db,dc; double SinA,SinB,SinC,CosA,CosB,CosC; double Mx1,Mx2,Mx3,My1,My2,My3,Mz1,Mz2,Mz3;  da = M_PAI * (double)a; db = M_PAI * (double)b; dc = M_PAI * (double)c;

     SinA = sin(da); SinB = sin(db); SinC = sin(dc); CosA = cos(da); CosB = cos(db); CosC = cos(dc);

     Mx1 = CosA * CosB; Mx2 =-CosA * SinB * SinC - SinA * CosC; Mx3 = SinA * SinC - CosA * SinB * CosC; My1 = SinA * CosB; My2 = CosA * CosC - SinA * SinB * SinC; My3 = SinA * SinB * CosC +  CosA * SinC; Mz1 = SinB; Mz2 = CosB * SinC; Mz3 = CosB * CosC;

     for ( DWORD i = 0; i < dwPoint ; i ++ ){  dx = lpPoint[i].tx - x;  dy = lpPoint[i].ty - y;  dz = lpPoint[i].tz - z;         tx =  (int)(dx * Mx1 + dy * My1 + dz * Mz1);  ty =  (int)(dx * Mx2 + dy * My2 + dz * Mz2);     tz =  (int)(dx * Mx3 - dy * My3 + dz * Mz3);

        if ( tz == 0 )   tz = 1;  if ( tz > 0 ){     lpPoint[i].pt.x = (tx*500)/tz+lpDX->dwWidth/2;   lpPoint[i].pt.y = (ty*500)/tz+lpDX->dwHeight/2;    }  else{   lpPoint[i].pt.x = - ( (tx*500)/tz-lpDX->dwWidth/2 );    lpPoint[i].pt.y = - ( (ty*500)/tz-lpDX->dwHeight/2 );    } }}

     

    // Screen.cpp : Defines the entry point for the application.//

    #include "stdafx.h"#include "uaiia3d.h"

    UAIIADX uaiiadx;UAIIA3D uaiia3d1,uaiia3d2,uaiia3d3;

    LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );

    static double da = 0;static double db = 0;static double dc = 0;static int  tdx = 0;double tda[15] = {0.011,1.876,2.456,3.555,4.987,5.234,5.123,4.222,3.111,2.198,1.124,0.121,0.297,1.127,2.214};double tdb[15] = {0.111,2.876,3.456,4.555,5.987,4.234,3.123,2.222,1.611,2.198,1.524,0.821,0.397,1.127,2.214};double tdc[15] = {5.311,4.876,3.456,2.555,2.987,1.234,0.123,1.222,2.111,2.198,1.124,2.121,1.097,2.127,3.214};int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){ MSG msg; if ( !InitWindow( hInstance, nCmdShow ) )  return FALSE; if ( !uaiiadx.Init()){  DestroyWindow(GetActiveWindow());  return FALSE; } uaiia3d1.Bind(&uaiiadx); uaiia3d2.Bind(&uaiiadx); uaiia3d3.Bind(&uaiiadx); uaiia3d1.FillBox(100,300,300,500,100,300); uaiia3d2.SetAre(350,150,450,128,17); uaiia3d3.SetAre(350,450,350,128,19);

     /* uaiia3d1.Run3D(); uaiia3d1.Run2D();  uaiia3d2.Run3D(); uaiia3d2.Run2D(); uaiia3d3.Run3D(); uaiia3d3.Run2D(); */

     while (GetMessage(&msg, NULL, 0, 0)){  TranslateMessage(&msg);  DispatchMessage(&msg); } return msg.wParam;}//******************************************************************//函数:InitWindow()//功能:创建主窗口。//******************************************************************static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow ){ HWND hwnd; //窗口句柄 WNDCLASS wc; //窗口类结构 //填充窗口类结构 wc.style = 0; wc.lpfnWndProc = WinProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "dxuaiia"; //注册窗口类 RegisterClass( &wc ); //创建主窗口 hwnd = CreateWindowEx(0,wc.lpszClassName,"",WS_POPUP,0, 0,  GetSystemMetrics( SM_CXSCREEN ),GetSystemMetrics( SM_CYSCREEN ),  //0,0,  NULL,NULL,hInstance,NULL ); if( !hwnd )  return FALSE; ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); return TRUE;}//******************************************************************//函数:WinProc()//功能:处理主窗口消息//******************************************************************LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ){  HDC hdc; switch( message ){  case WM_KEYDOWN:   {      //PostMessage(hWnd, WM_CLOSE, 0, 0);    switch( wParam ){     case VK_ESCAPE:      PostMessage(hWnd, WM_CLOSE, 0, 0);      break;     case '1':      uaiiadx.lpDDSPrimary->GetDC(&hdc);      TextOut(hdc,2,2,"uaiia",5);      uaiiadx.lpDDSPrimary->ReleaseDC(hdc);      break;     case '2':      uaiiadx.lpDDSBack->GetDC(&hdc);      TextOut(hdc,2,20,"XHX",3);      uaiiadx.lpDDSBack->ReleaseDC(hdc);      break;     case '3':            uaiiadx.lpDDSPrimary->Flip(NULL,DDFLIP_WAIT);      break;    }   }   break;  case WM_TIMER:   {    int r,g,b;    int dz;    int n;    if ( uaiiadx.Lock(RGB(0,0,0)) == TRUE ){      tdx++;          n = (tdx/900)(;     if (n>14)      n = 28-n;     da+=tda[n];     db+=tdb[n];     dc+=tdc[n];     r = (int)(da/3+db/2)00;     g = (int)(db/3+db/2)00;     b = (int)(da/3+dc/2)00;     dz = (int)(da*3+db*7+dc*2)

    转载请注明原文地址: https://ibbs.8miu.com/read-6023.html

    最新回复(0)