游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2921|回复: 7

请教高手们D3D9几个问题,在线等~

[复制链接]

2

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
发表于 2006-4-26 14:36:00 | 显示全部楼层 |阅读模式
高手们帮忙,谢谢:

1.  模版缓冲(stencil )和背景缓冲(back buffer)的区别是什么啊?
     我知道背景缓冲是用来做交换链的,那么模版缓冲是做什么用的?

2.  D3D9 SDK Tutorials 里 lights 例子里这段代码:
void SetupMatrices()
{
    // 让世界矩阵绕X轴旋转
    D3DXMATRIX matWorld;                                                         //设置世界矩阵
    D3DXMatrixIdentity( &matWorld );                                           //???
    D3DXMatrixRotationX( &matWorld, timeGetTime()/100 );           //绕x轴旋转
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );   //实现变换

    。。。
}

(1)请高手看看我的注释对不对,
(2)//???这个函数是做什么用的。
(3)timeGetTime()这个函数是返回什么值的?
我在DirectX SDK for C++里查了,但是看不懂它的意思。

3.  D3D9 SDK Tutorials里最后那个Mesh例子里,从一个.x文件加载一个module以后,
模型的纹理和材质都被读入了,为什么还要指定纹理和材质呢?
是不是一个材质只能对应一个纹理?那么多层材质贴图是怎么实现的呢?

谢谢高手们,在线等。

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2006-4-26 14:51:00 | 显示全部楼层

Re:请教高手们D3D9几个问题,在线等~

    D3DXMATRIX matWorld;                                                         //声明矩阵
    D3DXMatrixIdentity( &matWorld );                                           //将矩阵设置为单位矩阵
    D3DXMatrixRotationX( &matWorld, timeGetTime()/100 );           //绕x轴旋转
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );   //将矩阵设置为D3D中的世界矩阵

The timeGetTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started.

DWORD timeGetTime(VOID);
返回一个DWORD型值,里面存放着从windows启动以来已经过去的时间,单位是毫秒.

2

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
 楼主| 发表于 2006-4-26 15:02:00 | 显示全部楼层

Re:请教高手们D3D9几个问题,在线等~

谢谢您的指点,不过我还是有一点不明白,既然timeGetTime()是返回已经启动的时间,那么不同的开机时间自然就返回不同的结果,那么我旋转的角度不就和我开机的时间有关啦?

Angle

[in] Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin.

timeGetTime()函数的第2个参数是以弧度计算的,是不是函数内部进行了对2*D3DX_PI的模运算?不过这样开机时间不同旋转角度还是不同啊。。。。

38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2006-4-26 15:40:00 | 显示全部楼层

Re:请教高手们D3D9几个问题,在线等~

   2*PI 与4*PI  等等之类的,其表示的物体位置,还不是一样的?  无论那个角度多么大,其结果都是周期性的。

2

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
 楼主| 发表于 2006-4-26 15:42:00 | 显示全部楼层

Re:请教高手们D3D9几个问题,在线等~

对,我知道是周期性的。但是在一个周期之内的角度不就不同了吗?

2

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
 楼主| 发表于 2006-4-26 16:39:00 | 显示全部楼层

Re:请教高手们D3D9几个问题,在线等~

自己查到了模板缓冲的作用了,呵呵。
将物体沿着光线的照射方向扩展成一个锥形,被锥形所笼罩的物体就被判断为是处于阴影中的物体。这个锥就称为“阴影锥”(就是Shadow Volume了)。而程序如何判断物体是否在形成的阴影锥内呢?就全靠被称为“模板缓冲”(Stencil Buffer)的技术。利用设置好的物体和阴影锥的深度,通过比较和运算,可以将要绘制的在阴影中物体对应于屏幕上的像素,通过可以遮罩住屏幕上的任意区域的模版缓冲遮罩住。然后针对每一个光源绘制有光照的部分的颜色,就能实现逼真且震撼的精确阴影效果。
NV的ULTRA SHADOW技术就是一种模版缓冲技术。

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-4-27 08:49:00 | 显示全部楼层

Re:请教高手们D3D9几个问题,在线等~

用timeGetTime是为了让模型自己不停旋转,起始角度是什么并不重要.
你如果非要让它一样可以这么干:
static DWORD dwStartTime = timeGetTime();
D3DXMatrixRotationX( &matWorld, (timeGetTime() - dwStartTime) / 100.0f );

2

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
QQ
 楼主| 发表于 2006-4-27 10:38:00 | 显示全部楼层

Re:请教高手们D3D9几个问题,在线等~

这样可以,不过老虎移动的角度好像不对劲了。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 08:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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