游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5131|回复: 4

关于DX8.1到DX9更新的几个问题

[复制链接]

11

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2008-2-19 10:43:00 | 显示全部楼层 |阅读模式
Begin、End不是ID3DFont的成员,现在是什么?
CreateImageSurface不是IDirect3DDevice9的成员,应该用什么代替这个函数
还有DeleteVertexShader,DX9里应该用什么(我把里面所有的SetVertexShader改成了SetFVF)
D3DXCreateFontIndirect这个函数应该怎么改第二个参数?(以前是LOGFONT,现在是FONT_DES)
D3DTSS_ADDESSU这些已经变成了D3DSAM_ADDESSU了,使用SetSamplerState函数来设置,是否将以前的SetTextureStageStateState全部改成SetSamplerState语句?
D3DRS_ZBIAS在DX9中是否替换为D3DRS_DEPTHBIAS?
/******************************************************************************
pDevice->SetIndices(m_IB.GetIndexBuffer(),m_VB.GetStartIndex());
pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,4,m_IB.GetStartIndex(),2);
/******************************************************************************
pDevice->SetIndices(m_IB.GetIndexBuffer()/*,m_VB.GetStartIndex()*/);
pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,m_IB.GetStartIndex(),2);
上面那是以前的,下面这个是现在的,不知道改对没有.....

100

主题

224

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2008-2-21 15:09:00 | 显示全部楼层

Re: 关于DX8.1到DX9更新的几个问题

问:
Begin、End不是ID3DFont的成员,现在是什么?
答:
ID3DXFont     *pFont;
D3DXCreateFontIndirect(_dev, &desc, &pFont);
不用begin(), end(), 直接DrawText(), 参见sdk

问:
CreateImageSurface不是IDirect3DDevice9的成员,应该用什么代替这个函数
答:
CreateOffscreenPlainSurface

问:
还有DeleteVertexShader,DX9里应该用什么(我把里面所有的SetVertexShader改成了SetFVF)
答:
release 它的 handle

问:
D3DXCreateFontIndirect这个函数应该怎么改第二个参数?(以前是LOGFONT,现在是FONT_DES)
答:
        D3DXFONT_DESC desc;
        ZeroMemory(&desc , sizeof(desc));
        desc.CharSet = DEFAULT_CHARSET;
        desc.Height = 12;// -MulDiv( 12, (INT)(GetDeviceCaps( 0, LOGPIXELSY)), 72 );
        strcpy(desc.FaceName , "Tahoma");

问:
D3DTSS_ADDESSU这些已经变成了D3DSAM_ADDESSU了,使用SetSamplerState函数来设置,是否将以前的SetTextureStageStateState全部改成SetSamplerState语句?
答:
SetTextureStageStateState函数只有Sampler功能的部份分离出来成SetSamplerState

问:
D3DRS_ZBIAS在DX9中是否替换为D3DRS_DEPTHBIAS?
答:
是的

问:
/******************************************************************************
pDevice->SetIndices(m_IB.GetIndexBuffer(),m_VB.GetStartIndex());
pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,4,m_IB.GetStartIndex(),2);
/******************************************************************************
pDevice->SetIndices(m_IB.GetIndexBuffer()/*,m_VB.GetStartIndex()*/);
pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,m_IB.GetStartIndex(),2);
上面那是以前的,下面这个是现在的,不知道改对没有.....
答:
是对的.
它的参数意义如下解释:
DrawIndexedPrimitive(Type, BaseVertexIndex, MinIndex, numVertex, StartIndex, PrimitiveCount);

参数1:Primitive类型, 如: D3DPT_TRIANGLELIST
参数2: VB缓冲的有效偏移值(即此值后的缓冲是本次绘制的有效VB)
参数3: 最小顶点索引(从有效VB中算)
说明:
参数3比较容易混乱,其实它的意思是,本次绘制中的所有3角形所索引到的顶点,
在有效VB中偏移最小的哪一个偏移.
The first vertex is located at index: BaseVertexIndex + MinIndex

参数4: 要渲染的顶点个数(即有效VB中所用到的最小偏移的顶点到最大偏移的顶点之间所包含的顶点个数)
参数5: IB缓冲的有效偏移值(IB中从哪个索引开始有效)
参数6: Primitive个数

11

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2008-2-25 10:53:00 | 显示全部楼层

Re:关于DX8.1到DX9更新的几个问题

非常感谢,呵呵

不过偶还是有点问题捏
DX8.1时没有HLSL,也就没有vs,当时SetVertexShader是设置顶点格式(在D9中为SetFVF),但是在D9中替换了函数后,貌似当初那DeleteVertexShader和D9中那删除vs不一样吧

pDevice->SetIndices(m_IB.GetIndexBuffer()/*,m_VB.GetStartIndex()*/);
pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,m_IB.GetStartIndex(),2);
关于DrawIndexedPrimitive写得非常详细,呵呵
不过在原来时,DX8.1的pDevice->SetIndices(m_IB.GetIndexBuffer(),m_VB.GetStartIndex());
后面那个是m_VB,不是m_IB。这个值应该在DX9中要用才是,不然结果不正确

100

主题

224

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2008-3-1 09:15:00 | 显示全部楼层

Re:关于DX8.1到DX9更新的几个问题

问:
  DX8.1时没有HLSL,也就没有vs
答:
DX8.1时没有HLSL并不代表不能用vs, 它有asm版本的vs,即.vsh, 同时它还有ps

问:
  当时SetVertexShader是设置顶点格式(在D9中为SetFVF),但是在D9中替换了函数后,貌似当初那DeleteVertexShader和D9中那删除vs不一样吧
答:
dx9替换后的SetFVF是在固定管道时用来设置顶点格式的,固定管理没有vs, 所以没有什么可删除!
如果你用vs则可以无视它SetFVF的存在,因为dx9中vs使用另外的接口定义顶点的格式,
即d3dDevice->CreateVertexDeclaration

100

主题

224

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2008-3-1 09:20:00 | 显示全部楼层

Re:关于DX8.1到DX9更新的几个问题

似乎你还有一个问题
问:
不过在原来时,DX8.1的pDevice->SetIndices(m_IB.GetIndexBuffer(),m_VB.GetStartIndex());
后面那个是m_VB,不是m_IB。这个值应该在DX9中要用才是,不然结果不正确
答:
VB是通过SetVertexStream函数来设置的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 07:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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