游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1599|回复: 0

不知道为什么,这儿render后比原图小很多,谁能告诉我!

[复制链接]

7

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2006-11-24 16:28:00 | 显示全部楼层 |阅读模式
下面代码是我用来将一个图片做为纹理rander到画面上,
不知道为什么,rander到画面的图形大小比原来的图形小,
大概只有原来的70-80%左右吧,不知道为什么,谁能告诉,谢谢
    //定义0.5的坐标
    D3DVECTOR vNorm(0, 0, -1);
    m_avMagic[0]  = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0);
    m_avMagic[1]  = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1);
    m_avMagic[2]  = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0);
    m_avMagic[3]  = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1);
    if ( g_xMainWnd.Get3DDevice() )
    {
        D3DVECTOR vTrans;
        D3DMATRIX matTrans;
        D3DMATRIX matScale;
        D3DMATRIX matWorld;
        D3DMATRIX matWorldOriginal;
        D3DMATERIAL7 mtrl;
        if( SUCCEEDED(g_xMainWnd.Get3DDevice()->BeginScene()))
        {
            
            // 矩阵(Matrices)
            //3-D变换(3-D Transformations)            
            g_xMainWnd.Get3DDevice()->GetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
            
            m_pxImage->SetIndex(_IMG_IDX_LOGIN_BORDER);
            
            vTrans.x =100; //(FLOAT)m_rcWnd.left+(FLOAT)(m_rcImgWnd.right-m_rcImgWnd.left)/2-400;
            vTrans.y =100; //(FLOAT)-m_rcWnd.top-(FLOAT)(m_rcImgWnd.bottom-m_rcImgWnd.top)/2+290;
            vTrans.z = 0;
            //平移
            D3DUtil_SetTranslateMatrix(matTrans, vTrans); //matTrans=vTrans
            
            //缩放
            D3DUtil_SetScaleMatrix(matScale, (FLOAT)m_pxImage->m_lpstCurrWilImageInfo->shWidth,
                (FLOAT)m_pxImage->m_lpstCurrWilImageInfo->shHeight, 0.0f);
            //级连,先平移,后缩放,
            D3DMath_MatrixMultiply(matWorld, matScale, matTrans);
            g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorld);
            
            
            g_xMainWnd.Get3DDevice()->SetTexture(0,
                D3DWILTextr_GetSurface(m_pxImage->m_szWilFileName, _IMG_IDX_LOGIN_BORDER));
            D3DUtil_InitMaterial(mtrl, (FLOAT)(255.0/255.0),(FLOAT)(255.0/255.0),(FLOAT)(255.0/255.0));
            mtrl.diffuse.a = 200/255.0f;
            g_xMainWnd.Get3DDevice()->SetMaterial(&mtrl);
            
            
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, TRUE );
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, TRUE);
            g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
            g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAOP,   D3DTOP_MODULATE);
            g_xMainWnd.Get3DDevice()->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
            
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE);
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA);
            
            g_xMainWnd.Get3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, m_avMagic, 4, NULL);
            
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, FALSE);
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_COLORKEYENABLE, FALSE);
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_SRCBLEND , D3DBLEND_ONE);
            g_xMainWnd.Get3DDevice()->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO);
            g_xMainWnd.Get3DDevice()->SetTransform(D3DTRANSFORMSTATE_WORLD, &matWorldOriginal);
            
            g_xMainWnd.Get3DDevice()->EndScene();
        }
    }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 23:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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