游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 使命召唤

这是谁做的游戏

[复制链接]

56

主题

758

帖子

768

积分

高级会员

Rank: 4

积分
768
发表于 2008-7-10 15:43:00 | 显示全部楼层

Re: Re:这是谁做的游戏

使命召唤: Re:这是谁做的游戏

XXNN最近也习惯灌水了,你的马甲我知道。

使命召唤已经习惯灌水了,你的本体我知道

0

主题

160

帖子

160

积分

注册会员

Rank: 2

积分
160
发表于 2008-7-10 15:44:00 | 显示全部楼层

Re:这是谁做的游戏

支持楼上。随着VB的落寞,vb区已经是一个烂区了。伤心涅。

27

主题

295

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2008-7-10 17:33:00 | 显示全部楼层

Re: Re:这是谁做的游戏

这有什么难的, 预先做好几个光照贴图, 然后人物周围的光,和地图里的灯光都渲染到一个离屏页面上, 这个页面和屏幕一样大小的,然后再用这个页面和后台页面做光照加成.用D3D7都可以实现

非常好!!
但是我?想看看实际的例子,用说的我不想听
照你这么说应该很简单,我也很好奇,你如何能办到和我相同的效果,除非你作一个例子给我看
没有挑衅的意思

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2008-7-10 18:54:00 | 显示全部楼层

Re:这是谁做的游戏

呵呵,我还要做工,只有中午和傍晚有时间看看论坛,写例子真是没功夫,只有个大概的思路:
        device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
        device->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );    //关闭阿尔法测试
        device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO );
        device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );

        DrawSurfaceHelp( device, x, y );

        device->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );    //关闭阿尔法混合
        device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
        device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ZERO );
        device->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );      //打开阿尔法测试

11

主题

1238

帖子

1782

积分

金牌会员

Rank: 6Rank: 6

积分
1782
发表于 2008-7-10 19:01:00 | 显示全部楼层

Re: Re: Re:这是谁做的游戏

另外,再贴一张光照贴图,我的方法就是把这个图渲染到一个纹理上,可以渲染多个,然后再把这个纹理渲染到后台页面上.
sf_200871019042.gif

61

主题

1429

帖子

1430

积分

金牌会员

Rank: 6Rank: 6

积分
1430
 楼主| 发表于 2008-7-10 21:51:00 | 显示全部楼层

Re:这是谁做的游戏

这是我写的:
int __stdcall fxLight(HDC DC, int X, int Y, int Color, int Extension, int Intensity, int Definition, int Flags)
{
        int ExtensionPOW2        = Extension * Extension;

        int DestX                        = X - Extension;
        int DestY                        = Y - Extension;
        int        DestWidth                = Extension * 2;
        int DestHeight                = Extension * 2;

        if (Extension < 0)
                Extension = 0;
               
        if (Intensity < 0)
                Intensity = 0;
        if (Intensity > 255)
                Intensity = 255;

        if (Definition < 0)
                Definition = 0;
        if (Definition > 255)
                Definition = 255;


        int fxR                                = fxGetRed(Color);
        int fxG                                = fxGetGreen(Color);
        int fxB                                = fxGetBlue(Color);


        BITMAPINFOHEADER        BMI;
        BMI.biSize                        = sizeof(BITMAPINFOHEADER);
        BMI.biWidth                        = DestWidth;
        BMI.biHeight                = DestHeight;
        BMI.biPlanes                = 1;
        BMI.biBitCount                = 32;
        BMI.biCompression        = BI_RGB;
        BMI.biSizeImage                = 0;
        BMI.biXPelsPerMeter = 0;
        BMI.biYPelsPerMeter = 0;
        BMI.biClrUsed                = 0;
        BMI.biClrImportant        = 0;

        /*
        BYTE                                *pDestBits;
        HBITMAP                                hbmDest;
        hbmDest = ::CreateDIBSection(DestDC, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pDestBits, NULL, 0l);
        */

        BYTE                                *pSrcBits;
        HBITMAP                                hbmSrc;
        hbmSrc = ::CreateDIBSection(DC, (BITMAPINFO *)&BMI, DIB_RGB_COLORS, (void **)&pSrcBits, NULL, 0l);

        HDC                                        dc = ::CreateCompatibleDC(NULL);
        HBITMAP                                hbm = (HBITMAP) ::SelectObject(dc, hbmSrc);
       
        if (!::BitBlt(dc, 0, 0, DestWidth, DestHeight, DC, DestX, DestY, SRCCOPY))
                return 0;

        /*
        ::SelectObject(dc, hbmDest);

        if (!::StretchBlt(dc, 0, 0, DestWidth, DestHeight, DestDC, DestX, DestY, DestWidth, DestHeight, SRCCOPY))
                return 0;
        */

        ::SelectObject(dc, hbm);

        :eleteDC(dc);


        POINT pt;
        RECT rect;

        rect.left = 0;
        rect.top = 0;
        rect.right = DestWidth;
        rect.bottom = DestHeight;


        double d;

        if (Flags == 1)
        {
                d = ((double)Definition) / 100;
                Definition = 0;
        }

    for (int y = -Extension; y < Extension; y++)
    {
                pt.y = y + Extension;

                LPBYTE pbSrcRGB = (LPBYTE)&((DWORD*)pSrcBits)[pt.y * DestWidth];

                for (int x = -Extension; x < Extension; x++)
                {
                        pt.x = x + Extension;

                        if ((x * x + y * y) < (ExtensionPOW2))
                        {
                                if (:tInRect(&rect, pt))
                                {
                                        int Light = (int)((1 - 1 * sqrt(x * x + y * y) / Extension) * Intensity);
                                       
                                        switch (Flags)
                                        {
                                                case 0:       
                                                        pbSrcRGB[(pt.x * 4) + 0] = fxShadeColors(pbSrcRGB[(pt.x * 4) + 0], fxB, Light);
                                                        pbSrcRGB[(pt.x * 4) + 1] = fxShadeColors(pbSrcRGB[(pt.x * 4) + 1], fxG, Light);
                                                        pbSrcRGB[(pt.x * 4) + 2] = fxShadeColors(pbSrcRGB[(pt.x * 4) + 2], fxR, Light);
                                                        break;
                                                case 1:       
                                                        pbSrcRGB[(pt.x * 4) + 0] = fxByte(pbSrcRGB[(pt.x * 4) + 0] + (int)(Light * d) + Definition + fxShadeColors(Definition, fxB, Light));
                                                        pbSrcRGB[(pt.x * 4) + 1] = fxByte(pbSrcRGB[(pt.x * 4) + 1] + (int)(Light * d) + Definition + fxShadeColors(Definition, fxG, Light));
                                                        pbSrcRGB[(pt.x * 4) + 2] = fxByte(pbSrcRGB[(pt.x * 4) + 2] + (int)(Light * d) + Definition + fxShadeColors(Definition, fxR, Light));
                                                        break;
                                                case 2:       
                                                        pbSrcRGB[(pt.x * 4) + 0] = fxByte(fxShadeColors(pbSrcRGB[(pt.x * 4) + 0], fxB, Light) + fxShadeColors(Definition, fxB, Light));
                                                        pbSrcRGB[(pt.x * 4) + 1] = fxByte(fxShadeColors(pbSrcRGB[(pt.x * 4) + 1], fxG, Light) + fxShadeColors(Definition, fxG, Light));
                                                        pbSrcRGB[(pt.x * 4) + 2] = fxByte(fxShadeColors(pbSrcRGB[(pt.x * 4) + 2], fxR, Light) + fxShadeColors(Definition, fxR, Light));
                                                        break;
                                                case 3:       
                                                        pbSrcRGB[(pt.x * 4) + 0] = fxByte(pbSrcRGB[(pt.x * 4) + 0] + Light + Definition + fxShadeColors(Definition, fxB, Light));
                                                        pbSrcRGB[(pt.x * 4) + 1] = fxByte(pbSrcRGB[(pt.x * 4) + 1] + Light + Definition + fxShadeColors(Definition, fxG, Light));
                                                        pbSrcRGB[(pt.x * 4) + 2] = fxByte(pbSrcRGB[(pt.x * 4) + 2] + Light + Definition + fxShadeColors(Definition, fxR, Light));
                                                        break;
                                                case 4:       
                                                        pbSrcRGB[(pt.x * 4) + 0] = fxByte(pbSrcRGB[(pt.x * 4) + 0] + Light + Definition);
                                                        pbSrcRGB[(pt.x * 4) + 1] = fxByte(pbSrcRGB[(pt.x * 4) + 1] + Light + Definition);
                                                        pbSrcRGB[(pt.x * 4) + 2] = fxByte(pbSrcRGB[(pt.x * 4) + 2] + Light + Definition);
                                                        break;
                                                default:
                                                        pbSrcRGB[(pt.x * 4) + 0] = fxByte(pbSrcRGB[(pt.x * 4) + 0] + (int)(Light * d) + Definition + fxShadeColors(Definition, fxB, Light));
                                                        pbSrcRGB[(pt.x * 4) + 1] = fxByte(pbSrcRGB[(pt.x * 4) + 1] + (int)(Light * d) + Definition + fxShadeColors(Definition, fxG, Light));
                                                        pbSrcRGB[(pt.x * 4) + 2] = fxByte(pbSrcRGB[(pt.x * 4) + 2] + (int)(Light * d) + Definition + fxShadeColors(Definition, fxR, Light));
                                                        break;
                                        }
                                }
                        }
                }
        }


        dc = ::CreateCompatibleDC(NULL);
       
        hbm = (HBITMAP) ::SelectObject(dc, hbmSrc);
        if (!::BitBlt(DC, DestX, DestY, DestWidth, DestHeight, dc, 0, 0, SRCCOPY))
                return 0;

        ::DeleteDC(dc);

        ::DeleteObject(hbmSrc);       
        //::DeleteObject(hbmDest);       
       
        return 1;
}

27

主题

295

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2008-7-10 22:19:00 | 显示全部楼层

Re:这是谁做的游戏

用GDI作的效能就不敢恭维了....

61

主题

1429

帖子

1430

积分

金牌会员

Rank: 6Rank: 6

积分
1430
 楼主| 发表于 2008-7-10 22:41:00 | 显示全部楼层

Re:这是谁做的游戏

用什么方法不是问题,关键是做到.

27

主题

295

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2008-7-10 22:47:00 | 显示全部楼层

Re:这是谁做的游戏

游戏如果跑不动那跟垃圾有何差别?

3

主题

92

帖子

92

积分

注册会员

Rank: 2

积分
92
发表于 2008-7-10 23:08:00 | 显示全部楼层

Re:这是谁做的游戏

要是大菠萝2用GDI的话,十核的CPU也跑不起来........
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 18:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表