高分求教懂D3D10的达人

ahzhuo 2009-06-12 09:44:50
在D3D10中,如何将一个Texture2D传送到另一个尺寸不同的Texture2D上,要求使用硬件缩放,请懂这个的D3D10达人提供具体代码,一定高分相送!
...全文
201 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahzhuo 2009-06-16
  • 打赏
  • 举报
回复
最后我还是把问题解决了,谢谢大家的帮助!

现在觉得这确实是个蛮简单的功能,实现起来也不算麻烦,就是一开始接触时有太多陌生的东西了,要一样一样地去了解、琢磨和梳理,这个过程比较无助和迷茫。

Shader的代码基本上就是前面贴过的那段,只不过最后还把Projection矩阵也给精简掉了,AddressU V 改成了 Border,同时指定边框颜色为黑色。然后按部就班创建Effect、获取Technique、获取Texture的ShaderResource变量,创建源Texture、创建源ShaderResourceView、创建目的Texture、创建目的RenderTargetView、创建InputLayout、VertexBuffer,设置OMSetRenderTargetView,设置Viewport,设置ShaderResource变量,设置InputLayout、VertexBuffer,设置PrimitiveTechnology,最后在Render Pass中Draw就可以了。

到此结贴!
ahzhuo 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 soilwork 的回复:]
引用 14 楼 P_hantom 的回复:
楼上的别用静态的眼光看东西啊,DX10明显是进步的,更好的,何必排斥呢,DX9将被淘汰这是肯定的,随着Win7和DX11的到来,新的一轮现实API将要来临,DX11和DX10是一个体系的,熟悉DX10可以更好的为以后打下良好的基础


我没有说dx10或者11不好,只是楼主的情况根本不需要用这些技术就可以实现
另外,在dx10下,如果是msaa的renderTarget或者backbufer,可以用ResolveSubresource
[/Quote]

DX10的文档是这样写的:

ID3D10Device::ResolveSubresource

Both the source and destination resources must be the same resource type and have the same dimensions

貌似不行啊!
ahzhuo 2009-06-16
  • 打赏
  • 举报
回复
再说点题外话:DX10的好多API的返回类型都是void,无法得知是否成功执行了,难道这种函数本身能确保运行成功吗?如果不能,那岂不是增加了程序调试的难度?
soilwork 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 P_hantom 的回复:]
楼上的别用静态的眼光看东西啊,DX10明显是进步的,更好的,何必排斥呢,DX9将被淘汰这是肯定的,随着Win7和DX11的到来,新的一轮现实API将要来临,DX11和DX10是一个体系的,熟悉DX10可以更好的为以后打下良好的基础
[/Quote]

我没有说dx10或者11不好,只是楼主的情况根本不需要用这些技术就可以实现
另外,在dx10下,如果是msaa的renderTarget或者backbufer,可以用ResolveSubresource
IONPhantom 2009-06-15
  • 打赏
  • 举报
回复
楼上的别用静态的眼光看东西啊,DX10明显是进步的,更好的,何必排斥呢,DX9将被淘汰这是肯定的,随着Win7和DX11的到来,新的一轮现实API将要来临,DX11和DX10是一个体系的,熟悉DX10可以更好的为以后打下良好的基础
IONPhantom 2009-06-14
  • 打赏
  • 举报
回复
Shader没问题
AddressU和V 最好设置为Clamp
soilwork 2009-06-14
  • 打赏
  • 举报
回复
唉 路都没走稳就想学跑了

我只是想用D3D10来实现一个硬件加速的图像缩放功能,因为硬件加速的不但速度快,而且缩放效果也好
---------------------------
如果只是实现这样的功能,dx9足以
hendriclee 2009-06-14
  • 打赏
  • 举报
回复
学习
ahzhuo 2009-06-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 P_hantom 的回复:]
D3D10的R2T方法和D3D9是一样的,只不过Texture多了一个ResourceView而已
难道你是因为Shader才不会做吗?如果是那得好好学习啊,以后可没有固定管线了
[/Quote]

是啊,我是在这一块其实是新手,所来才来提问的。现在的情况是我并不是要做全面的3D程序,我只是想用D3D10来实现一个硬件加速的图像缩放功能,因为硬件加速的不但速度快,而且缩放效果也好。这个功能以前我用D3D9的StretchRect()函数实现了,不用管什么顶点、矩阵、光照之类的东西,现在由于种种原因必须要升级到D3D10,没有StretchRect()函数了,折腾了HLSL、Texture2D、VertexBuffer、RenderTargetView、ResourceView等等半天都没有弄出来,特别是HLSL以前没有接触过,大哥能不能给段简化的范例代码呀?创建窗口和SwapChain的部分可以省略。分不够我再加100分。
allix123 2009-06-13
  • 打赏
  • 举报
回复
学习...
ahzhuo 2009-06-13
  • 打赏
  • 举报
回复
着急呀~~~先帮忙看一下我这段HLSL代码对不对吧:

Texture2D txDiffuse;
SamplerState samLinear
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};

cbuffer cbChangesEveryFrame
{
matrix Projection;
};

struct VS_INPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD;
};

struct PS_INPUT
{
float4 Pos : SV_POSITION;
float2 Tex : TEXCOORD0;
};

PS_INPUT VS(VS_INPUT input)
{
PS_INPUT output = (PS_INPUT)0;

output.Pos = mul(input.Pos, Projection);
output.Tex = input.Tex;

return output;
}

float4 PS(PS_INPUT input) : SV_Target
{
return txDiffuse.Sample(samLinear, input.Tex);
}

technique10 Render
{
pass P0
{
SetVertexShader(CompileShader(vs_4_0, VS()));
SetGeometryShader(NULL);
SetPixelShader(CompileShader(ps_4_0, PS()));
}
}
IONPhantom 2009-06-13
  • 打赏
  • 举报
回复
D3D10的R2T方法和D3D9是一样的,只不过Texture多了一个ResourceView而已
难道你是因为Shader才不会做吗?如果是那得好好学习啊,以后可没有固定管线了
ahzhuo 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 P_hantom 的回复:]
用 RenderToTexture ,将目标纹理设置为RenderTarget然后往上画呗
[/Quote]

这个思路我知道,可是具体代码我不会写,找不到合适的范例代码,D3D10跟D3D9好像很不一样,D3D10要用到HLSL来做Vertex Shader,相关文档看得是一头雾水啊,貌似好复杂,不像D3D9中用一个StretchRect()函数就搞定了,D3D10不知道为什么把StretchRect()这个函数给去掉了,哪位大侠能给出一份范例代码呀?万分感谢啊!
glacier3d 2009-06-12
  • 打赏
  • 举报
回复
坚持在D3D9战线上的人顶起!
IONPhantom 2009-06-12
  • 打赏
  • 举报
回复
用 RenderToTexture ,将目标纹理设置为RenderTarget然后往上画呗
AliasKavin 2009-06-12
  • 打赏
  • 举报
回复
RenderInTexture ~~
aaaa3105563 2009-06-12
  • 打赏
  • 举报
回复
帮顶·
张赐 2009-06-12
  • 打赏
  • 举报
回复
d3d10真没有搞过...

8,303

社区成员

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

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