游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4325|回复: 10

请教:如何动态修改顶点的纹理坐标tu,tv值?

[复制链接]

4

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2007-5-14 15:50:00 | 显示全部楼层 |阅读模式
我定义了4个顶点构成一个矩形。并且初始化了他们的纹理坐标值。
CUSTOMVERTEX g_Vertices[] =
{
    { -2.0f, -2.0f,  2.0f, 0.0f, 0.0f },
    {  2.0f, -2.0f,  2.0f, 1.0f, 0.0f },
    { -2.0f, -2.0f, -2.0f, 0.0f, 1.0f },
    {  2.0f, -2.0f, -2.0f, 1.0f, 1.0f },
};

但是我想能够动态的改变tu,tv。比如这四个顶点的tv都依次减去0.1
这样渲染之后产生的效果是动态的。
我在 Render()函数里面对它进行了改变,
for( int i = 0; i < 4; i++ )
{       
     g_Vertices.tv += 0.1f;
     if( g_Vertices.tv > 1.0f )
         g_Vertices.tv -= 1.0f;
}
为什么结果没有变化,还是静止的。
是否是应该用g_pVB 来进行内存操作,那又该怎样使用呢?

[em24]

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2007-5-14 15:58:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

貌似应该去修改vb中的值。。

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-5-14 16:24:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

使用纹理矩阵

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2007-5-14 16:32:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

如果每个顶点的值需要修改的不一样,能用纹理矩阵么?

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2007-5-14 16:44:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

该了之后,还必须去刷新VB里的数据才会有变化。

“如果每个顶点的值需要修改的不一样,能用纹理矩阵么?”
不能,自定义修改:要么软处理,要么VertexShade。

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-14 22:07:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

我来补充详细点。
既然 lz 你会创建顶点缓冲区,那么lock、unlock肯定懂的,
再lock一次,更新数据,之后渲染。
现在我提出问题:为什么每个顶点都不同呢?这样每次渲染都更新顶点很耗时间,顶点多时更是如此,用纹理矩阵更方便快捷。

4

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2007-5-15 14:37:00 | 显示全部楼层

Re: 请教:如何动态修改顶点的纹理坐标tu,tv值?

能大概讲一下什么是纹理矩阵么?

还有在用DirectX进行开发的时候是不是还有common结构这一说?
好像9.0c版本和9.0版本的commn不一样啊,我安装的是9.0c版的,运行资料书上的一些例子时就会发生很多错误。

比如9.0版里面用commn结构有CD3DMesh这个类,9.0c里面就没有。反正我借的资料书里面的例子都是没有用的了。
[em4]痛苦ing

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2007-5-15 15:32:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

也可以考虑R2VB。或者其它类似的办法。

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-15 16:36:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

既然lz问到,我从《DirectX高级动画制作》上抄给你。
1。平移纹理的矩阵和普通的3D平移一样。
2。旋转。只可以使用D3DXMatrixRotationZ,默认为绕左上角旋转,要改变可以先平移,旋转,再平移回来。
   D3DXMatrixTranslation(&matTrans1,-0.5f,-0.5f,0.0f);
   D3DXMatrixRotationZ(&matRot,1.57f);
   D3DXMatrixTranslation(&matTrans2,0.5f,0.5f,0.0f);
   matTransformation = matTrans1 * matRot * matTrans2; // 顺序不可错
之后就要设置纹理矩阵了,有一个麻烦,要把 4x4 矩阵变为 3x3 矩阵才行,对应如下:
  matTex11 = matTF11 matTex12 = matTF12 matTex13 = matTF13 matTex14 = 0.0f
  matTex21 = matTF21 matTex22 = matTF22 matTex23 = matTF23 matTex24 = 0.0f
// 主要改变在下面
  matTex31 = matTF41 matTex32 = matTF42 matTex33 = matTF43 matTex34 = 0.0f
  matTex41 = matTex42 =matTex43 = 0.0f  matTex44 = 1.0f
可以做成一个Matrix4x4To3x3函数便于使用。
现在可以使用了:
  pDevice->SetTransform(D3DTS_TEXTURE0,&matTex);
  // 启用
  pDevice->SetTextureStageState(0,D3DTSS_TEXTRUETRANSFORMFLAGS,D3DTTFF_COUNT2);
  // 停止
  pDevice->SetTextureStageState(0,D3DTSS_TEXTRUETRANSFORMFLAGS,D3DTTFF_DISABLE);

当然,不一定在 0 阶段使用,随便你设置了。
  

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-15 16:38:00 | 显示全部楼层

Re:请教:如何动态修改顶点的纹理坐标tu,tv值?

lz要说谢谢哈。
呵呵,也是为了回答你的问题我才把纹理变换看了。
哎,书非借不能读也,我借的图书馆的书也不看,浪费了,默哀……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 10:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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