游戏开发论坛

 找回密码
 立即注册
搜索
查看: 16048|回复: 25

一个有关D3D9里的HLSL函数tex2D()用法的问题

[复制链接]

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2004-10-27 15:34:00 | 显示全部楼层 |阅读模式
各位大虾,帮我看看这段程序有什么问题。

float4 filterval;
float sourcevals1[4];
filterval = tex2D( g_samFilter, float2(x,y));
sourcevals1[0] = filterval. r ;
sourcevals1[1] = filterval.g ;
sourcevals1[2] = filterval.a ;
sourcevals1[3] = filterval.b ;
说明:g_samFilter为指向2维纹理的指针,该纹理中每个像素值为4个整数(r,g,b,a),范围为0-255。x,y为纹理空间的一个坐标,范围为0-1。

现在我想在filterval里也得到r,g,b,a四个量,类型变为float也可,但值大小不能变化。不知道我这样写是否可行?如果不行,用什么方法可以?
请高手指点,多谢了! [em3]

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-10-27 20:15:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

高手快来指点一下啊,小弟感激不尽!

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2004-10-28 10:16:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

当然可以了

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-10-28 10:16:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

咋没人响应啊?快帮一下忙啊,谢谢!

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-10-28 20:53:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

secondage
你说我上面那样写可以啊?肯定吗?
我试了不怎么行,也说不定是我程序中别的地方有问题。
再问一下这部分还有什么别的写法吗?

3

主题

95

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2004-10-30 00:05:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

实在没有理解你说的什么意思?
tex2D采样之后的数值,怎么会是在0-255?应该是0.0-1.0之间啊,他是一个浮点数啊。
还有,float xxx[4]这样的数组何必?直接一个float4型变量,赋值就一次性赋值就行,还一个一个单独的赋值,何苦?

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-10-30 12:51:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

lyzcom
  我定义的纹理g_samFilter的像素格式是D3DFMT_A8R8G8B8,就是每个像素存放R,G,B,A四个整数,每个整数占8位,所以范围为0-255。
  我上面那段程序的目的是用tex2D函数把纹理里的每个像素的R,G,B,A值分别取出来,用在其他地方。
  如果读出来的值filterval 范围为0-1,那是不是就把我原来里面寸的值改变了?如果是这样,那filterval乘以255是不是可以恢复原来的值?
  为了达到我的目的,你觉得用什么方法比较好?
  请帮忙回答一下,多谢了!

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2004-10-30 18:53:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

tex2D出来的值都是0~1之间的
你需要自己乘上255,才能得到0~255之间的数

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-10-30 19:39:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

我乘了一下感觉结果太大了。
tex2D函数的第二个参数是纹理的一个坐标吧?是不是必须为0-1的一个浮点数?
函数返回的应该是纹理上指定位置的像素值吧?
我是这样用的,怕弄错了。

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2004-10-31 00:04:00 | 显示全部楼层

Re:一个有关D3D9里的HLSL函数tex2D()用法的问题

tex2D第一个参数是sampler,第2个参数才是纹理坐标
而且纹理坐标无需在0,1之间,这个根据你sampler address state来决定
tex2D从一个2D贴图上通过你给定的纹理坐标返回一个float4
如果按你贴图的格式是RGBA的,那么这个float4  的4个分量的值都是只会在0,1之间
的浮点数
你为什么需要0-255之间的整数呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 05:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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