游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2021|回复: 2

请教如何换贴图纹理?

[复制链接]

4

主题

36

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2007-7-3 19:32:00 | 显示全部楼层 |阅读模式
最近在做个简单关于换装的DEMO,暂时还没想要换模型,只想先搞搞纹理

比如同样的一个正方体,本来是红色的贴图.

怎么在DX里调用函数换成另一种贴图纹理?还要不要重新渲染?  [em24]

还有就是可以用DX的哪个函数来获取原本的贴图纹理? [em24]

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-7-4 23:19:00 | 显示全部楼层

Re:请教如何换贴图纹理?

我用灵活顶点的方法可以处理
DX渲染模型前需要先调用一个SetTexture的函数来设置接下来的渲染顶点将采用什么纹理贴图
那么只要在模型每次刷新前修改了SetTexture所设置的纹理贴图,那么就会实现切换纹理
首先把贴图纹理创建好:
         if( FAILED( D3DXCreateTextureFromFile( g_pD3DDevice, "uv.bmp", &g_pTexture ) ) )
    {
        // If texture is not in current folder, try parent folder
        if( FAILED( D3DXCreateTextureFromFile( g_pD3DDevice, "..\\uv.bmp", &g_pTexture ) ) )
        {
            MessageBox(NULL, "Could not find uv.bmp", "Textures.exe", MB_OK);
            return E_FAIL;
        }
    }
         if( FAILED( D3DXCreateTextureFromFile( g_pD3DDevice, "uv1.bmp", &g_pTexture1 ) ) )
    {
        // If texture is not in current folder, try parent folder
        if( FAILED( D3DXCreateTextureFromFile( g_pD3DDevice, "..\\uv1.bmp", &g_pTexture1 ) ) )
        {
            MessageBox(NULL, "Could not find uv1.bmp", "Textures.exe", MB_OK);
            return E_FAIL;
        }
然后就是渲染,我画了两个方形,由于这个程序是自己学习拿来当试验乱写的乱添的
所以可能有点混乱,主渲染的部分贴出来,对付着看应该能看清楚^_^
HRESULT Render()
{
        if(g_pD3DDevice== NULL)
        {
                return E_FAIL;
        }
        //清除后台缓冲区颜色为黑色
        g_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
        //开始渲染
        g_pD3DDevice->BeginScene();
        D3DXMATRIX matWorld,move;
       
        //设置旋转、相机和投影矩阵
        g_pD3DDevice->SetTexture( 0, g_pTexture );
        g_pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,D3DTOP_SELECTARG1);//禁止顶点颜色对纹理过渡
       
        //渲染
        g_pD3DDevice->GetTransform(D3DTS_WORLD,&matWorld);
        SetupRotation();
        SetupCamera();
        SetupPerspective();
       
        g_pD3DDevice->SetStreamSource(0,g_pVertexBuffer,0,sizeof(CUSTOMVERTEX));
        g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
        g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
        g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,4,8);
        g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,14,2);

        //结束渲染

        g_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld);
        SetupRotation1();
        if(g_textChange) g_pD3DDevice->SetTexture( 0, g_pTexture1 );
        else g_pD3DDevice->SetTexture( 0, g_pTexture );
       
        g_pD3DDevice->SetStreamSource(0,g_pVertexBuffer,0,sizeof(CUSTOMVERTEX));
        g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);//d8中的SetVertexShader(D3DFVF_CUSTOMVERTEX),在d9中如果用此函数可为:SetVertexShader(NULL)
        g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
        g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,4,8);
        g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,14,2);
        g_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld);

        g_pD3DDevice->EndScene();

        //交换前后缓冲区
        return g_pD3DDevice-&gtresent(NULL,NULL,NULL,NULL);       
}

0

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2007-7-6 16:56:00 | 显示全部楼层

Re:请教如何换贴图纹理?

楼上正解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 22:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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