游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5435|回复: 7

【已解决】D3D9 的Sprite绘制RGB565 Texture颜色会比较淡

[复制链接]

9

主题

86

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2013-1-28 21:06:14 | 显示全部楼层 |阅读模式
本帖最后由 shigaofei 于 2013-1-30 19:53 编辑

RT

使用D3D9 的Sprite 绘制的 RGB565格式的Texture 颜色都比较淡。
与此同时,绘制的ARGB8888 的则没有什么问题。

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2013-1-29 15:23:05 | 显示全部楼层
RGB565 格式是用16位色模拟24位色,画面质量自然不能和ARGB8888比了。

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2013-1-29 15:37:46 | 显示全部楼层
Devil 发表于 2013-1-29 15:23
RGB565 格式是用16位色模拟24位色,画面质量自然不能和ARGB8888比了。

一般肉眼无法直接看出16位和32位有多少区别.
所以,这点质量损失完全可以忽略不计

9

主题

86

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
 楼主| 发表于 2013-1-29 20:03:42 | 显示全部楼层
Devil 发表于 2013-1-29 15:23
RGB565 格式是用16位色模拟24位色,画面质量自然不能和ARGB8888比了。

稍等一下,我贴图片给你们看一下。
看一下导出的位图和我渲染的,差距太大了。。。

9

主题

86

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
 楼主| 发表于 2013-1-29 20:04:06 | 显示全部楼层
微无渊 发表于 2013-1-29 15:37
一般肉眼无法直接看出16位和32位有多少区别.
所以,这点质量损失完全可以忽略不计 ...

稍等一下,我贴图片给你们看一下。
看一下导出的位图和我渲染的,差距太大了。。。

9

主题

86

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
 楼主| 发表于 2013-1-29 20:17:48 | 显示全部楼层

原图片

原图片

上面这张是原图片
下面这张是我绘制出来的

我绘制出来的

我绘制出来的



相差也太远了。

之前由于没有在使用AlphaBlend之前保存Device 的状态,导致32位的背景也变成了有点半透明,那个问题已经解决。
但是现在这个问题,不知道是怎么回事。。。
按理来说。载入的时候的的确确是设置的Format.R5G6B5
所以应该说,资源本身应该没问题。于此同时,D3D也是支持这种格式的。
但是问题是,要怎么正确地画出来呢。。。怎样才能确保,画出来显示在屏幕上的图像的颜色能够和原图(RGB565的位图)显示出来的一样的效果。

9

主题

86

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
 楼主| 发表于 2013-1-29 20:20:10 | 显示全部楼层
本帖最后由 shigaofei 于 2013-1-29 20:23 编辑
  1. S2d.Begin(SpriteFlags.AlphaBlend|SpriteFlags.DoNotSaveState);

  2.             current++;
  3.             if (current % 60 == 0)
  4.             {
  5.                 index = current / 60;
  6.                 if (index >= magics.Length)
  7.                 {
  8.                     current = 0;
  9.                     index = current;
  10.                 }
  11.             }
  12.             //StateBlock sb = new StateBlock(dev, StateBlockType.All);

  13.             //dev.SetRenderState(RenderState.AlphaBlendEnable, false);
  14.             dev.BeginStateBlock();


  15.             //dev.SetRenderState(RenderState.AlphaBlendEnable, false);
  16.             //dev.SetRenderState(RenderState.DiffuseMaterialSource, ColorSource.Color1);
  17.             //dev.SetRenderState(RenderState.SourceBlend, Blend.One);
  18.             //dev.SetRenderState(RenderState.DestinationBlend, Blend.One);
  19.             //dev.SetRenderState(RenderState.SourceBlend, Blend.One);
  20.             var state = dev.EndStateBlock();
  21.             state.Apply();
  22.             S2d.Draw(bg, new Rectangle(0, 0, 800, 600), null, new Vector3(0, 0, 0),Color.White);
  23.             //dev.SetRenderState(RenderState.AlphaBlendEnable, true);

  24.             S2d.Draw(magics[index], new Vector3(0, 0, 0), new Vector3(0, 0, 0),Color.White);

  25.             state.Dispose();
  26.             //sb.Apply();
  27.             //S2d.Draw(magics[index], new Vector3(0, 0, 0), new Vector3(50, 50, 0), new Color4(Color.White));
  28.             ////dev.SetRenderState(RenderState.SourceBlend, BlendOperation.);
  29.             S2d.End();
  30.             S2d.Begin(SpriteFlags.AlphaBlend | SpriteFlags.DoNotSaveState);
  31.             text.DrawString(S2d, "FPS:" + FPS.Current, 0, 0, Color.White);
  32.             S2d.End();
复制代码


9

主题

86

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
 楼主| 发表于 2013-1-30 19:50:55 | 显示全部楼层
已解决,问题在 纹理上。。。
纹理初始化的时候 level  填1进去就ok
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-27 02:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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