关于D3D,纹理坐标的自动生成

mmmcd 2011-03-28 05:20:48
请教,下面的语句是自动生成纹理坐标的
pd3dDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
pd3dDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS,D3DTTFF_COUNT2);
如果用功能等价的shader实现,该怎么写?
...全文
154 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
IONPhantom 2011-04-15
  • 打赏
  • 举报
回复
楼主你在vs里弄是能看出三角形的棱角的
mmmcd 2011-04-15
  • 打赏
  • 举报
回复
搞定结贴

简单写可以这样:

float4x4 InvWorldViewT : INVVIEWTRANSPOSE;
float4x4 WorldView : WORLDVIEW;

VS:
float3 vNormal = mul(In.Normal, (float3x3)InvWorldViewT);
float3 vPosition = mul(In.Pos, WorldView);
Out.Reflect = -normalize(reflect(-vPosition, vNormal));

Out.Reflect = mul(Out.Reflect, 纹理transform);

Out.Reflect.xy就是纹理uv
IONPhantom 2011-04-15
  • 打赏
  • 举报
回复
上面公式写错了,应该是reflect((PixelPos-CameraPos),PixelNormal).
由于CameraPos是原点,所以可以简化为 reflect(PixelPos,PixelNormal).
IONPhantom 2011-04-15
  • 打赏
  • 举报
回复
你这个问题用Shader写还需要一些额外的信息,因为固定管线做这个内部已经有信息了.
1.因为你是要进行着色,所以首先肯定要在PS中进行
2.CameraSpace的反射,需要如下几个信息
a.原方向向量 b.反射法线
3.原方向向量:因为是在PS中所以是Camera位置和当前像素位置的差,因为是CameraSpace所以Camera的位置是(0,0,0),当前像素的位置就需要自己从VS传了,注意这个位置是CameraSpace的也就是需要经过WV变换,不能进行P变换
4.反射法线,这个需要看情况,如果是有NormalMap的那就直接从NormalMap里采样,如果没有那需要的就是顶点的法线插值出来传到PS中
5.有了原方向向量和反射法线用函数reflect一下就能获取反射向量了.

最终就是reflect((CameraPos-PixelPos),PixelNormal).代码是伪代码.关键的问题在于像素的位置和法线
gamemagic 2011-04-02
  • 打赏
  • 举报
回复
应该是投影后的屏幕坐标,自己算吧
Sou2012 2011-04-01
  • 打赏
  • 举报
回复
SHADER 里要自己计算纹理坐标。
张赐 2011-03-30
  • 打赏
  • 举报
回复
在shader里就需要自己计算纹理坐标,

比如在shader里可以根据传入的顶点坐标的位置来计算纹理坐标

peng_weida 2011-03-29
  • 打赏
  • 举报
回复
通过顶点和某一向量做运算,从而生成纹理坐标
具体怎么做运算,和你想实现的功能相关
可以参考OpenGL编程指南纹理坐标自动生成那一小节,原理差不多的。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧