【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1763|回复: 2

[求助]对ID3DXSprite使用的不明白之处(续1)

[复制链接]
发表于 2009-6-8 09:31:23 | 显示全部楼层 |阅读模式

上次感谢谢鼹鼠大哥的指点,我使用D3DXCreateTextureFromFileEx这个函数可以

使图片的关键色变成透明,但是现在又遇到一个问题,如果我想将图片放大,使用缩放矩

阵,没有问题,但是如果想要缩小就不行了,代码如下:

void Init(){
 D3DXCreateSprite( g_pDevice, &g_pSprite );
 //D3DXCreateTextureFromFile(g_pDevice,_T("banana.bmp"),&g_pTexture);//用这个函数就没问题,但我不想用这个函数
 D3DXCreateTextureFromFileEx(g_pDevice, //D3D设备对象
                                              "banana.bmp", // 载入图片的地址
                                                D3DX_DEFAULT, // 图片的宽,
                                                D3DX_DEFAULT, // 图片的高
                                                D3DX_DEFAULT, // 图片的miplevels
                                                0,
                                                D3DFMT_UNKNOWN,
                                                D3DPOOL_MANAGED,
                                                D3DX_FILTER_NONE, 
                                                D3DX_FILTER_NONE,
                                                0xff000000, // 关键颜色值(黑色), 将载入的图片里面的关键颜色值设置为透明色
                                                NULL, //记录载入图片的信息
                                                NULL, //记录载入调色板的信息
                                                &g_pTexture); // 用来储存载入图片的纹理对象实例
}

void Render(){
 g_pDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0);
 g_pDevice->BeginScene();
       if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) ) //D3DXSPRITE_ALPHABLEND
         {
            D3DXMATRIX scaleMatrix;
            D3DXVECTOR3 m_scale;
            m_scale.x=1.6f;
            m_scale.y=1.6f;
            m_scale.z=0.f;
           ////放缩图片
           D3DXMatrixScaling(&scaleMatrix, m_scale.x,m_scale.y,m_scale.z);

           // 设置图片大小位置的转换
           g_pSprite->SetTransform(&scaleMatrix);
           g_pSprite->Draw(g_pTexture, NULL, NULL, NULL,D3DCOLOR_RGBA(255,255,255,255));
           g_pSprite->End();
          }
 g_pDevice->EndScene();
 g_pDevice->resent(NULL,NULL,NULL,NULL);
}

此处使用放大,一点问题都没有,但如果将m_scale的参数设为0.6缩小的话,就会产生问题,一个问题是会裁剪图片上的一部分

另一个问题是会产生重影,不知有谁遇到过没啊

发表于 2009-6-9 15:26:08 | 显示全部楼层

用 photoshop 检查一下你作为纹理的图片,那些黑色的部分,RGB值是不是真的就是(0,0,0).....我就碰到过,看上去是黑色,结果 RGB 值并不是纯粹的 (0,0,0)

发表于 2009-6-8 20:23:52 | 显示全部楼层
我把用D3DXCreateTextureFromFileEx创建的纹理对象再渲染到用D3DXCreateTexture创建的纹理上时 为什么黑色的透明无法透明呢???
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 12:41

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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