分享
 
 
 

简单的3D演示源程序

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

//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__ 20

UAIIA3D::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)%28;

if (n>14)

n = 28-n;

da+=tda[n];

db+=tdb[n];

dc+=tdc[n];

r = (int)(da/3+db/2)%300;

g = (int)(db/3+db/2)%300;

b = (int)(da/3+dc/2)%300;

dz = (int)(da*3+db*7+dc*2)%8000;

if ( dz > 4000 )

dz = 8000 - dz;

if ( r >= 150 )

r = 300 - r;

if ( g >= 150 )

g = 300 - g;

if ( b >= 150 )

b = 300 - b;

uaiia3d1.Run3D(350,150,450,db,dc,da);

uaiia3d1.Run2D(350,150,-100);

uaiia3d1.Draw(RGB(100+r,80+g,80+b));

uaiia3d2.Run3D(350,150,450,da,db,dc);

uaiia3d2.Run2D(uaiia3d1.lpPoint[11].pt.x-60,uaiia3d1.lpPoint[91].pt.y-150,100-dz/8);

uaiia3d2.Draw(RGB(80+g,100+b,80+r));

uaiia3d3.Run3D(uaiia3d2.lpPoint[6].x,uaiia3d2.lpPoint[7].y,uaiia3d1.lpPoint[62].z+500,dc,da,db);

uaiia3d3.Run2D(uaiia3d1.lpPoint[62].pt.x-60,uaiia3d1.lpPoint[39].pt.y-150,-dz/7);

uaiia3d3.Draw(RGB(80+b,80+r,100+g));

uaiiadx.UnLock();

}

}

break;

case WM_MOUSEMOVE:

//PostMessage(hWnd, WM_CLOSE, 0, 0);

break;

case WM_CREATE:

ShowCursor(FALSE);

SetTimer(hWnd,999,8,NULL);

break;

case WM_DESTROY:

ShowCursor(TRUE);

KillTimer(hWnd,999);

PostQuitMessage( 0 );

break;

}

return DefWindowProc(hWnd, message, wParam, lParam);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有