游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: cactusnb

如何知道显卡是否要求纹理尺寸必须是2的幂大小的?

[复制链接]

2

主题

683

帖子

687

积分

高级会员

Rank: 4

积分
687
发表于 2008-7-9 17:47:00 | 显示全部楼层

Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?

我现在使用非2次幂的地方非常多,完全没有问题.很早以前的显卡就已经ok了
即使显卡报不能支持非2次幂,仍然可以用非2次幂贴图。不知道是驱动层的功劳还是dx层的功劳

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-7-9 21:58:00 | 显示全部楼层

Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?

Turbo: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?

并非GF3系列之后都支持非2次幂大小的,GF4 MX440就不支持非2次幂的纹理。

嗯.. 对,我查到了,从GF4到GF5900FX都是只能2次幂的。6系列开始才是任意大小。。

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-7-9 22:03:00 | 显示全部楼层

Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小

cactusnb: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?



非常感谢你的解答。
再问你两个问题:
1. 我是要写一个2D游戏的图形渲染部分,假如检测到用户的机子的...


1、可以有几种方法:
   a、把纹理改称2次幂的,也就是说要经过缩放,这种方法对于一些图片还可以,但是对精确样式的图片就会失真。
   b、比如有张800*600的图片,你可以把它放到一个1024*1024里面,但是不把1024*1024这个图片占满,只用其中的800*600,最后在程序里面的时候也只用那一部分。
   c、用几张小图片拼接成大图片
   大概就是这些方法吧。

2、体积纹理就是。。。纹理除了宽度和高度之外还有深度,比如128*128*64,可以理解成64 张128*128的图片,也就是说有64个切面,在程序里面用的时候,可以从任何角度进行切面出来使用,也有些特殊用法。这种纹理似乎只有dds的格式可以支持。

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-7-9 22:08:00 | 显示全部楼层

Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?

wildfire: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?

我现在使用非2次幂的地方非常多,完全没有问题.很早以前的显卡就已经ok了
即使显卡报不能支持非2次幂,仍然可以用非2次幂贴图。不知道是驱动层的功劳还是dx层的功劳


这个是D3DX的功能,用D3DXCreateTextureFromFileEx函数创建纹理的时候,当参数满足一定情况的时候,如果显卡不支持非2次幂的纹理,它会把纹理放大到2n次幂,然后把纹理内容放大(也可以设置为不放大)。但是这种情况遇到象素图片(比如棱角分明的那种)之后就会出现模糊。。

23

主题

94

帖子

94

积分

注册会员

Rank: 2

积分
94
 楼主| 发表于 2008-7-10 09:54:00 | 显示全部楼层

Re: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂

Fenger: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?



1、可以有几种方法:
   a、把纹理改称2次幂的,也就是说要经过缩放,这种方法对于一些图片还可以,但...

谢谢你,解答的很详细,赞!

23

主题

94

帖子

94

积分

注册会员

Rank: 2

积分
94
 楼主| 发表于 2008-7-10 09:56:00 | 显示全部楼层

Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小

Fenger: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?



这个是D3DX的功能,用D3DXCreateTextureFromFileEx函数创建纹理的时候,当参数满足一定情况的时候,如果...


就是说即使显卡不支持那样的纹理,程序也能运行不会出大的问题,不过是效果差了点而已?...

2

主题

132

帖子

132

积分

注册会员

Rank: 2

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

Re: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂

cactusnb: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?



就是说即使显卡不支持那样的纹理,程序也能运行不会出大的问题,不过是效果差了点而已?...

嗯。。看具体怎么设置D3DXCreateTextureFromFileEx的参数了
HRESULT D3DXCreateTextureFromFileEx(
  LPDIRECT3DDEVICE9 pDevice,
  LPCTSTR pSrcFile,
  UINT Width,
  UINT Height,
  UINT MipLevels,
  DWORD Usage,
  D3DFORMAT Format,
  D3DPOOL Pool,
  DWORD Filter,
  DWORD MipFilter,
  D3DCOLOR ColorKey,
  D3DXIMAGE_INFO * pSrcInfo,
  PALETTEENTRY * pPalette,
  LPDIRECT3DTEXTURE9 * ppTexture
);

影响这个的就是Width, Height, Filter这几个参数

1、如果Width,Height设置为0或者D3DX_DEFAULT,那么会直接把纹理扩大到2n次幂。
    比如640*480就会变成1024*512,
    还有如果这个情况下Filter参数为D3DX_FILTER_NONE,那么把纹理扩大之后,不会扩大纹理内容,也就是说在1024*512的纹理里面,只有从(0,0)-(640,480)的部分有内容,其他部分为透明。
    如果Filter设置为其他值,就会按照指定的过滤方式将纹理内容一起放大到1024*512。
    Filter设置为D3DX_DEFAULT 等同于D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER,会放大纹理

2、如果Width,Height设置为D3DX_DEFAULT_NONPOW2,又分两种情况:
    a、如果显卡支持非2n次幂的纹理,那么创建出来的纹理则会按原来图片的大小;
    b、如果显卡只能使用2n次幂的纹理,那么这个函数会失败。

3、Width,Height设置为具体的值,则会缩放纹理到指定的值,如果这个值不是2n次幂,并且显卡不支持非2n次幂的纹理,也会失败,否则则会按照Filter的值进行纹理内容进行缩放或保持原大小。

23

主题

94

帖子

94

积分

注册会员

Rank: 2

积分
94
 楼主| 发表于 2008-7-10 18:30:00 | 显示全部楼层

Re: Re: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的

Fenger: Re: Re: Re: Re:如何知道显卡是否要求纹理尺寸必须是2的幂大小的?


嗯。。看具体怎么设置D3DXCreateTextureFromFileEx的参数了
HRESULT D3DXCreateTextureFromFileEx(
  L...

拜大侠!彻底明白了!多谢多谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 01:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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