ºìÁªLinuxÃÅ»§
Linux°ïÖú

Ò²ÍæÊÓ¾õЧ¹û£ºVC++±à³ÌʵÏÖ·ÂÕæ»ðÑæ

·¢²¼Ê±¼ä:2006-05-03 12:03:12À´Ô´:ºìÁª×÷Õß:°®µÄ±ßÔµ
ÒýÑÔ

¡¡¡¡¼ÆËã»ú·ÂÕæ¼¼ÊõµÄ»ù±¾Ô­Àí¶¼ÊÇÒ»ÑùµÄ£¬ÉñÃظ´Ôӵĺ˱¬Í¬Ë®²¨¡¢»ðÑæ¡¢ÑÌÎíµÈ·Ç³£Æ½³£µÄ×ÔÈ»ÏÖÏóÔÚ·ÂÕæ´¦Àí¹ý³ÌÖв¢Ã»ÓÐʲô̫´óµÄÇø±ð¡£¶¼ÊǾ­ÀúÁË´ÓʵÌå¶ÔÏóµ½ÎïÀíÌØÐÔµÄ×ܽᣬÔÙÓɴ˽¨Á¢ÊýѧģÐͲ¢ÔÚÊýѧģÐÍ»ù´¡Ö®ÉÏÌá³ö·ÂÕæËã·¨£¬×îºóͨ¹ý¼ÆËã»ú½«Æ䶯̬·ÂÕæ³öÀ´µÈһϵÁв½Öè¡£±¾ÎÄÒÔ»ðÑæ×÷Ϊ·ÂÕæ¶ÔÏó£¬Í¨¹ý¶ÔÈÈÔ´¡¢ÈÈÀ©É¢ÒÔ¼°¶ÔÁ÷µÈÌØÐԵķÖÎö¶ÔÆ佨Á¢ÁËÊýѧģÐͼ°·ÂÕæËã·¨£¬ÎªÁËÄܳä·Ö·¢»Ó¼ÆËã»ú¶ÔͼÐεÄÓ²¼þ¼ÓËÙ£¬Ê¹Óà DirectDraw¼¼Êõ¶Ô·ÂÕæ½á¹ûÏÔʾ½øÐÐÁ˼ÓËÙ£¬Ê¹Ö®ÄܱÆÕæ¡¢Á÷³©µØ¶Ô»ðÑæµÄȼÉÕ¹ý³ÌʵÐж¯Ì¬Ä£Äâ¡£

¡¡¡¡¼òµ¥½üËÆÄ£ÐÍÉè¼Æ

¡¡¡¡ËäÈ»»ðÑæÔÚ×ÔÈ»½çÊÇÒ»ÖÖ¼«ÆÕͨµÄ×ÔÈ»ÏÖÏ󣬵«¸ù¾ÝÁ÷ÌåÁ¦Ñ§µÄÏà¹Ø֪ʶ£¬»ðÑæ¿ÉÒÔ±í´ïΪһ¸öÏ൱¸´ÔÓµÄÈýά¶¯Ì¬Á÷Ìåϵͳ¡£ÈçÒªÔÚ¼ÆËã»úÖжÔÕâÑùÒ»¸ö¸´ÔÓµÄÁ÷Ìåϵͳ×ö³ö¾«È·µÄ·ÂÕ潫ÐèÒªÓÐÏ൱ÅÓ´ó¸´ÔÓµÄÊýѧģÐÍΪ»ù´¡£¬¶øÇÒÔËËãÁ¿½«·Ç³£¾Þ´ó£¬ÔÚÏÖÓеÄ΢ÐͼÆËã»úÖм¸ºõºÜÄѱ£Ö¤Æ䶯̬ʵʱÐÔ£¬ÕâÒ²¾ÍʧȥÁË·ÂÕæµÄÒâÒå¡£Òò´Ë£¬ÔÚ·ÂÕæʱӦÓþ¡¿ÉÄܼòµ¥µÄÄ£ÐÍÀ´ÊµÏÖ¾¡¿ÉÄܱÆÕæµÄЧ¹û¡£

¡¡¡¡´ÓÎïÀí½Ç¶È·ÖÎö£¬Òª²úÉú»ðÑ棬Ê×ÏÈÒªÓлðÔ´£¬Æä´ÎΪÁ˲úÉú"Ñæ "µÄЧ¹û£¬ÐèÒªÒÔ»ðԴΪÖÐÐÄÏòÉÏ¡¢ÏòËÄÖÜÀ©É¢£¬¶øÇÒÓÉÓÚÔÚÀ©É¢¹ý³ÌÖÐÖð½¥Ô¶Àë»ðÔ´£¬Î¶ȻáÖð½¥Ï½µ£¬±íÏÖÔÚÊÓ¾õÉϾÍÊÇ»ðÑæµÄÀäÈ´±ä°µ¡£ÁíÍ⣬ÓÉÓÚ»ðÑæµÄ¸ßÎÂʹÖÜΧ¿ÕÆøÊÜÈÈÅòÕͱÈÖØϽµ£¬Òò´Ë»áÓпÕÆøµÄ¶ÔÁ÷³öÏÖ£¬Õ⽫°Ñ»ðÑæÏòÉÏ"´µ"Æð£¬Ê¹»ðÑæÏòËÄÖÜÀ©É¢µÄ¾àÀëҪԶСÓÚÏòÉÏÀ©É¢µÄ¾àÀë¡£»ùÓÚÒÔÉϼ¸µãÈÏʶ£¬¿ÉÒÔ²ÉÈ¡¶ÔÓ¦µÄ·ÂÕæ´ëÊ©£º¶Ô»ðÔ´µÄÉèÖÿÉÒÔÓÃÒ»·ù¶þֵλͼÀ´±êʶ£¬·Ç»ðÔ´ÒÔµÍÁÁ¶ÈÏñËØÌî³ä¡¢»ðÔ´µãÔòÉèÒÔ¸ßÁÁ¶ÈÏñËØ£¬Í¨¹ý¶ÔλͼÏñËØÖµµÄÅбð¿ÉÒԶ϶¨µ±Ç°µãÊÇ·ñΪ»ðÔ´¡£




¡¡¡¡¶ÔÓÚ»ðÔ´µÄζȸߵͿÉÓÃÆäËùÔÚµãµÄÁÁ¶ÈÀ´ÃèÊö£»¶ÔÓÚ»ðÑæÀ©É¢µÄÄ£Ä⣬Ϊ¾¡Á¿¼õÉÙÔËËãÁ¿£¬Ôڴ˼òµ¥µØÓÃij»ðÔ´µã(x,y)¼°ÆäÇ°ºó×óÓÒÁÚ½üËĵãµÄ¾ùÖµÀ´½üËÆ£¬¼´Pixel(x,y)=(Pixel(x,y)+Pixel(x,y-1)+ Pixel(x,y+1)+Pixel(x-1,y)+Pixel(x+1,y))/5£¬ËäÈ»¸Ã½üËÆË㷨ûÓвÉÈ¡ÕýÓàÏҵķ½·¨¾«È·£¬µ«ÔËËãËٶȼ«¿ì£¬¶øÇÒÔÚºóÐøµÄʵÑéЧ¹ûÉÏͬ²ÉÓÃÕýÓàÏҵķ½·¨¼¸ºõûÓÐÈκβî±ð£»ÓÉÓÚÔÚ·ÂÕæ¹ý³ÌÖжԻðÑæµÄζÈÊÇͨ¹ý¸Ä±äÆäÁÁ¶ÈÖµÀ´ÊµÏֵģ¬Òò´Ë¶ÔÓÚÀ©É¢¹ý³ÌµÄÀäÈ´¿É¶ÔÏñËص㽵µÍÒ»¸ö¹Ì¶¨µÄÁÁ¶ÈÖµÀ´ÊµÏÖ¡£Ë¥¼õÖµµÄ´óСÐèÒªÊÓËùÏ£Íû»ðÑæÀäÈ´ËٶȵĿìÂý¶ø¶¨£»¶ÔÁ÷¶Ô»ðÑæ²úÉúµÄÖ±½ÓÓ°Ïì¾ÍÊÇʹ»ðÑæʼÖÕ±£³ÖÏòÉÏȼÉÕ£¬Òò´Ë¿Éͨ¹ý½«µ±Ç°»ðÑæÉϹöÒ»ÖÁÁ½¸öÏñËØÀ´¼ÓÒÔʵÏÖ¡£¸ù¾ÝÇ°ÃæÃèÊöµÄ·ÂÕæÔËËã·¨Ôò£¬¿É½«»ðÑæµÄÀ©É¢ºÍ¶ÔÁ÷ÈÚºÏÔÚÒ»ÆðʵÏÖ£¬Õ⽫ÔÚÒ»¶¨³Ì¶ÈÉϼõÉÙÔËËãÁ¿£¬Ê¹²úÉúµÄ»ðÑæÔÚÊÓ¾õÉϸü¼ÓÕæʵ¡£ÊµÏÖÉÏÊö½üËÆÄ£Ð͵Äα´úÂë¿É´óÖÂÉè¼ÆÈçÏ£º

ARRAY_OF_BYTES: buffer1(xsize*ysize)£¬buffer2(xsize*ysize)
While(TRUE){
¡¡for(y=1;y
¡¡¡¡for(x=1;x
¡¡¡¡¡¡n1 = buffer1(x+1, y) //¶ÁÈ¡4ÏàÁÙÏñËØÖµ
¡¡¡¡¡¡n2 = buffer1(x-1, y)
¡¡¡¡¡¡n3 = buffer1(x, y+1)
¡¡¡¡¡¡n4 = buffer1(x, y-1)
¡¡¡¡¡¡p = ((n1+n2+n3+n4+p) /5)£» //ËÄÁÙÏñËؾùÖµ
¡¡¡¡¡¡p = p-c£» //ͬһ¹Ì¶¨ÀäÈ´Ë¥¼õÖµÏà¼õ
¡¡¡¡¡¡if(p<0)
¡¡¡¡¡¡¡¡p=0
¡¡¡¡¡¡buffer2(x,y-1)=p
¡¡¡¡}
¡¡}
¡¡copy buffer2 to the screen ; //ÏÔʾÏÂÒ»Ö¡
¡¡copy buffer2 to buffer1£» //¸üÐÂBuffer1
}


»ðÑæ·Ç¾ùÔÈÀäÈ´µÄ¸Ä½øÄ£ÐÍ

¡¡¡¡¸ù¾ÝÉÏÊö½üËÆÄ£ÐͿɶԻðÑæ½øÐÐÒ»¶¨³Ì¶ÈÉϵķÂÕ棬µ«ÓÉÓÚûÓÐÒýÈëËæ»ú·Ö²¼»ðÑæÍùÍù¿´ÉÏÈ¥Ï൱µ¥µ÷¹æÔò£¬¶øÇÒ»ðÑæ×ܳÊÏßÐÔÉÏÉý£¬ÀäÈ´ËÙ¶ÈÒ²ÑϸñµØ±£³ÖͳһËÙÂÊ¡£ÒªÏû³ýÒÔÉÏÎÊÌ⣬¿Éͨ¹ýÒýÈëËæ»ú·Ç¾ùÔÈÒòËØÀ´½â¾ö¡£Ò»ÖÖ;¾¶ÊÇËæ»ú²¼Öø÷µãÀäȴֵʹ»ðÑæÀäÈ´¹ý³Ì·Ç¾ùÔÈ»¯¡£µ«ÓÉÓÚ»ðÑæµÄÄ£Äâ¹ý³ÌÊÇʵʱ½øÐеģ¬ÎªÈ·±£¶¯Ì¬Ä£Äâ¹ý³ÌÖÐÄÜ˳³©½øÐУ¬×îºÃÓÃÔ¤ÏÈ´´½¨µÄÀäȴλͼ£¨¼ûÓÒͼ£©À´´úÌæ¡£Ò»°ã²ÉÓÃÔÚÆÁÄ»ÉÏËæ»úÈö²¼¼¸Ç§¸öÁÁ¶È²»Í¬µÄµã²¢¶ÔÆäÓ¦ÓÃƽ»¬´¦ÀíµÈ·½·¨¶ÔÀäȴλͼ¼ÓÒÔÌî³ä¡£Í¨¹ýÀäȴͼÖлñÈ¡µÄÊýÖµÀ´´úÌæÔ­À´¹Ì¶¨µÄÀäÈ´Ë¥¼õֵЧ¹ûÒªºÃµÄ¶à£¬´ËʱµÄÀäÈ´¹ý³Ì¸Ä½øΪPixel(x,y)=Pixel(x,y)-Coolingmap(x,y) ÕâÑùµÄË¥¼õ½á¹û½«Ê¹»ðÑæµÄÀäÈ´Ë¥¼õЧ¹û¸ü¼ÓÕæʵ£º

p = lightBuf2+imgWidth*2;
pp = coolMap + coolMapWidth*2;
p1 = lightBuf1+imgWidth*2;
p2 = p1 - imgWidth;
p3 = p1 - 1;
p4 = p1 + 1;
p5 = p1 + imgWidth;
for(i=0;i¡¡//¼ÆËãijµã¼°ÆäËÄÁÚÏñËؾùÖµ
¡¡c1=(unsigned char)(((UINT)*p1+(UINT)*p2+(UINT)*p3+(UINT)*p4+(UINT)*p5)/5);
¡¡c2 = *pp;
¡¡if(c1>c2)
¡¡¡¡c1 -= c2;
¡¡*p = c1;
¡¡pp++,p++,p1++,p2++,p3++,p4++,p5++; //ÄÚ´æÖ¸ÕëÐÞÕý
}

¡¡¡¡ÓÉÓÚ»ðÑæÔÚ½øÐÐÀäÈ´Ë¥¼õµÄͬʱҲÔÚ½øÐÐ×Å»ðÑæµÄÀ©É¢Óë¶ÔÁ÷Òò´Ë±ØÐëʹÕ⼸ÖÖЧ¹û±£³Öͬ²½£¬ÕâÐèÒªÒÔͬ¶ÔÁ÷ËÙ¶ÈÏàͬµÄËÙ¶ÈÏòÉϹö¶¯ÀäȴλͼÀ´ÊµÏÖ¡£Îª¼õÉÙ²»±ØÒªµÄ²Ù×÷£¬¹ö¶¯ÊÇÔÚÄÚ´æÖÐͨ¹ý¸Ä±äÀäȴλͼµÄ´¹Ö±Æ«ÒÆÁ¿À´¼ÓÒÔʵÏÖ£º

memcpy(lightBuf1,lightBuf1+imgWidth*3,imgWidth*(imgHeight-3));

¡¡¡¡¾­¹ýÒÔÉϼ¸²½´¦ÀíËäÓÐÒ»¶¨³Ì¶ÈµÄ¸ÄÉÆ£¬µ«ÈÔ´æÔÚһЩȱÏÝ£¬±ÈÈçÉú´æÆÚ¡¢»ðÑæÉÏÉýËٶȺ㶨¡¢ÔÚÕû¸ö¿Õ¼äȼÉյȡ£ÎªÊ¹·ÂÕæЧ¹û¸ü¼Ó±ÆÕ棬¿Éͨ¹ýÉèÖÃÖÖ×ÓµãÀ´¶ÔÉÏÊöȱÏݼÓÒԸĽø¡£Í¬Ñù³öÓÚ´¦ÀíËٶȵĿ¼ÂÇ£¬×îºÃ½«ÖÖ×ÓµãÒ²ÒÔλͼµÄÐÎʽԤÏÈÉ趨£¬ÔÚ·ÂÕæʱֱ½ÓÔÚÄÚ´æÖÐͨ¹ýÒƶ¯Ö¸ÕëÀ´Íê³É¶ÔÖÖ×ÓµãµÄ·ÃÎÊ£¬ÆäÖ÷Òª´úÂë´óÖÂÈçÏ£º

int t = RAND_MAX/5;
topX = (imgWidth - seedMapWidth)/2; //seedMapWidthÖÖ×Óλͼ¿í¶È
topY = (imgHeight - seedMapHeight)/2; //seedMapHeightÖÖ×Óλͼ¸ß¶È
p = lightBuf1 + (topY+2)*imgWidth + topX; //p, unsigned charÐÍÖ¸Õë
ps = seedMap + seedMapWidth*2; //ps, unsigned charÐÍÖ¸Õë
for(j=0;j<(seedMapHeight-4);j++) {
¡¡p1 = p; //p1, unsigned charÐÍÖ¸Õë
¡¡for(k=0;k
¡¡¡¡if(*ps != 0){ //ps, unsigned charÐÍÖ¸Õë
¡¡¡¡¡¡if(rand() < t)
¡¡¡¡¡¡¡¡*p1 = 255;
¡¡¡¡}
¡¡¡¡p1++,ps++; //Ö¸ÕëÐÞÕý
¡¡}
¡¡p += imgWidth; //Ö¸ÕëÐÞÕý
}

ͼÐμÓËÙÏÔʾ

¡¡¡¡Ç°ÃæµÄËã·¨Éè¼ÆÖÐÒ»Ö±ºÜ×¢Òâ¼õÉÙ²»±ØÒªµÄÔËËãÁ¿ÒÔÆÚ»ñµÃ¾¡¿ÉÄܸߵĴ¦ÀíËٶȣ¬µ«½ö¿¿ºÃµÄËã·¨Ô¶²»ÄÜÈ¡µÃÂúÒâµÄÊÓ¾õЧ¹û¡£²»ÉÙ´óÐÍÓÎÏ·¾¡¹Ü³¡¾°·Ç³£¸´ÔÓ£¬³¡¾°±ä»¯¿ì£¬µ«Íæ¼ÒºÜÉÙÄܸоõµ½ÓÎÏ·ÓÐÄÑÒÔÈÌÊܵÄÍ£¶Ù¸Ð¡£Õâ²»½öÒòΪÓÎÏ·²ÉÈ¡Á˺õÄËã·¨¸üÖØÒªµÄÊÇÓÎÏ·ÔÚͬÍæ¼Ò½»»¥µÄ¹ý³ÌÖдóÁ¿²ÉÓÃÁËDirect X¼¼Êõ£¬¸Ã¼¼ÊõÊÇDirect Draw¡¢Direct Sound¡¢Direct 3DµÈÖî¶à¼¼ÊõµÄ×ܳơ£DirectDrawÊÇÆäÖÐ×îÖ÷ÒªµÄÒ»¸ö²¿¼þ£¬Ö÷Òª¸ºÔð¶ÔͼÐεļÓËÙ£¬²¢ÔÊÐí³ÌÐòÔ±¿ÉÒÔÖ±½Ó²Ù×÷ÏÔ´æ¡¢Ó²¼þλͼӳÉäÒÔ¼°Ó²¼þ¸²¸ÇºÍ»»Ò³¼¼Êõ¡£¶øÇҸü¼Êõ»¹Ö§³ÖË«»º³åºÍͼÐλ»Ò³¡¢3D z-buffers £¨z»º´æ£©ÒÔ¼°z·½Ïò£¨z-ordering£©Ó²¼þ¸¨Öú¸²¸ÇµÈÐí¶àÖØÒª¹¦ÄÜ¡£¿ÉÒÔ¿´³ö£¬Í¨¹ýʹÓÃDirect Draw¼¼Êõ½«¼«´ó¸ÄÉÆ·ÂÕæ½á¹ûµÄͼÐÎÊä³öЧ¹û£¬Äܷdz£Á÷³©µØ¶Ô»ðÑæ½øÐÐʵʱµÄ·ÂÕ档ʹÓøü¼Êõ֮ǰ±ØÐëÏȽøÐгõÊÔ»¯µÈÔ¤´¦Àí¹¤×÷£º

//´´½¨DirectDraw¶ÔÏó£¨ÎªÍ»³ö³ÌÐòÁ÷³Ì£¬ÒÔϾù¶Ô´íÎó¼ì²â½øÐÐÁËÊ¡ÂÔ£©
DirectDrawCreate( NULL, &lpDD, NULL );
//È¡µÃÈ«ÆÁ¶Àռģʽ
lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
//ÉèÖÃÏÔʾÆ÷ÏÔʾģʽ
lpDD->SetDisplayMode( 640,480, 16 );
//Ìî³äÖ÷Ò³ÃæÐÅÏ¢
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |DDSCAPS_FLIP | DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1; //Ò»¸öºǫ́ҳÃæ
//´´½¨Ö÷Ò³Ãæ
lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);
DDPIXELFORMAT pixelFormat;
pixelFormat.dwSize = sizeof(DDPIXELFORMAT);
lpDDSPrimary->GetPixelFormat(&pixelFormat);
¡­¡­

¡¡¡¡³õʼ»¯Íê³Éºó¿ÉÒÔͨ¹ýÔÚºǫ́ҳÃæ»æͼ£¬²¢ÔÚ»æÖÆÍê±Ïºó½«ºǫ́ҳÃ渴ÖƵ½Ö÷Ò³ÃæÍê³É¶Ôһ֡ͼÏñµÄÏÔʾ£º

lpDDSBack->Blt(NULL,NULL,NULL,DDBLT_COLORFILL|DDBLT_WAIT, &ddbltfx);
ddrval = lpDDSBack->Lock(NULL, &ddsd, 0, NULL) //Ëø¶¨ºǫ́ҳÃæ
while (ddrval== DDERR_WASSTILLDRAWING);
if( ddrval == DD_OK ){
¡¡fire.render((WORD*)ddsd.lpSurface); //Íê³É¶ÔÒ»Ö¡»ðÑæµÄäÖȾ
¡¡lpDDSBack->Unlock(NULL); //½âËøºǫ́ҳÃæ
}
while( 1 ) {
¡¡ddrval = lpDDSPrimary->Flip( NULL, 0 ); //»»Ò³
¡¡if( ddrval == DD_OK )
¡¡¡¡break;
¡¡if( ddrval == DDERR_SURFACELOST ){
¡¡¡¡ddrval = lpDDSPrimary->Restore(); //»Ö¸´Ö÷Ò³Ãæ
¡¡if( ddrval != DD_OK )
¡¡¡¡break;
}
if( ddrval != DDERR_WASSTILLDRAWING )
¡¡break;
}

¡¡¡¡¸ù¾ÝÒÔÉϳÌÐòËã·¨¶Ô»ðÑæ½øÐÐÁË·ÂÕæʵÑ飬ÔÚËٶȺͷÂÕæ½á¹ûÔÚÊÓ¾õµÄ±ÆÕæ³Ì¶ÈÉ϶¼»ñµÃÁ˷dz£ºÃµÄЧ¹û¡£ÓÒͼÊÇ´Ó·ÂÕæ¹ý³ÌÖнØÈ¡µÄÒ»Ö¡»­Ã棬´ÓͼÖпÉÒÔ¿´³ö£¬ËäÈ»ÔÚÇ°ÃæµÄËã·¨Éè¼Æ¹ý³ÌÖжദ²ÉÓÃÁË¿´Ëƹý·ÖµÄ½üËÆ´¦Àí£¬µ«²¢Î´Òò´Ë²úÉú¸ºÃæЧ¹û¡£ÊµÑé±íÃ÷£¬±¾ÎIJÉÓõÄÔÚÊý¾Ý»º³åÇøÖжÔͼÏó½øÐд¦ÀíµÄ·½·¨ÔÚ³ÌÐòÔËËãºÍÏÔʾµÄËÙ¶ÈÉÏÓë·ÂÕæ¶ÔÏó--»ðÑæµÄ¸´Ôӳ̶ÈÊÇÎ޹صģ¬Òò´ËÓÃÀàËƵķ½·¨ÍêÈ«¿ÉÒԱȽÏÈÝÒ×µØʵÏÖ¶ÔÆäËû¸´ÔÓÎïÀí¡¢×ÔÈ»ÏÖÏóµÄ·ÂÕæÄ£Äâ¡£




¡¡½áÂÛ

¡¡¡¡±¾ÎÄͨ¹ý¶Ô»ðÑæµÄ¼ÆËã»ú·ÂÕæÄ£ÄâʵÏÖ¹ý³Ì£¬¶Ô·ÂÕæÄ£ÄâÀà³ÌÐòÒ»°ãµÄÉè¼ÆʵÏÖ¹ý³Ì×öÁ˼òÒª½éÉÜ¡£Í¨¹ý¶Ô±¾ÎÄËùÊö³ÌÐòÉè¼Æ˼·ÓëʵÏÖ·½·¨µÄÀí½â£¬¿ÉÒÔÓÃÀàËƵķ½·¨½áºÏʵ¼ÊÇé¿öÁé»îÑ¡ÓÃÖîÈçOpenGL¡¢Direct3DµÈ²»Í¬µÄÈí¼þ½Ó¿Ú¶ÔÆäËûһЩ×ÔÈ»ÏÖÏó½øÐзÂÕæÄ£Äâ¡£±¾ÎÄËùÊö³ÌÐòÔÚWindows 98Ï£¬ÓÉMicrosoft Visual C++ 6.0µ÷ÊÔͨ¹ý£¨ÐèÒªDirectX 5.0Ö§³Ö£©¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ