游戏开发论坛

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

急!dx3d 的问题

[复制链接]

6

主题

59

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
发表于 2003-8-16 14:07:00 | 显示全部楼层 |阅读模式
  我在dx3d9中运行Tutorials3。这是一个简单的正三角形沿Y轴旋转,我把它改为按z轴旋转,但是正三角形旋转到不在0度或180度的时候会发生变形。我怎么也不能使它在旋转时保持原形,有谁知道为什么吗?
  请各位高人指点,小生这厢有礼了! [em24]

21

主题

109

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2003-8-16 17:01:00 | 显示全部楼层

Re:急!dx3d 的问题

那是因为观察点的原因,将D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
换成D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-5.0f );就能满足你的要求了,

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20356
QQ
发表于 2003-8-16 23:13:00 | 显示全部楼层

Re:急!dx3d 的问题

看你是如何进行旋转的,如果只是视角旋转,那么要注意距离,如果只是世界坐标轴的旋转,那应该就很容易了。

6

主题

59

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2003-8-18 17:10:00 | 显示全部楼层

Re: 急!dx3d 的问题

[em4] [em4] [em4]
我就是八十点改为在z轴上观察的,初始状态如下:
g_matWorld( 1, 0, 0, 0,
                0, 1, 0, 0,
                0, 0, 1, 0,
                0, 0, 0, 1 );

g_matview( 1, 0, 0, 0,
                0, 1, 0, 0,
                0, 0, 1, 0,
                0, 0, 0, 1 );
g_EyePt( 0.0f, 0.0f, -10.0f );
g_LookatPt( 0.0f, 0.0f, 1.0f );
g_vUpVec( 0.0f, 1.0f, 0.0f );
g_FieldOfView( D3DX_PI / 4 );
g_AspectRatio( 1.0f );
g_NearClip( 0.0f );
g_FarClip( 100.0f );

{ -1.0f,-1.0f, 0.0f, 0xffff0000, },
{  1.0f,-1.0f, 0.0f, 0xffff0000, },
{  0.0f, 1.0f, 0.0f, 0xffff0000, },

这时是正三角形没错,我在SetupMatrices里改了一下,大概如下:

case VK_NEXT: //得到绕z轴旋转的矩阵
  D3DXMatrixRotationZ( &matTemp, -g_RotationDelta );

//设置世界矩阵
g_pd3dDevice->SetTransform( D3DTS_WORLD, &g_matWorld );

//设置视点矩阵,我试过旋转世界矩阵或视点矩阵都是一样的结果:
//只要不是在0度获180度,三角形旋转后看起来不再是正三角形了
D3DXMATRIXA16 matView;
D3DXMatrixMultiply( &matView, &g_matView, &matTemp );
g_matView = matView;
D3DXMatrixLookAtLH( &matTemp, &g_vEyePt, &g_vLookatPt, &g_vUpVec );
D3DXMatrixMultiply( &matView, &g_matView, &matTemp );

g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

//投影矩阵
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, g_FieldOfView, g_AspectRatio, g_NearClip, g_FarClip );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

请各位高人看看 !

6

主题

59

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2003-8-19 11:00:00 | 显示全部楼层

Re: 急!dx3d 的问题

没人指点吗?

6

主题

59

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2003-8-20 10:29:00 | 显示全部楼层

Re:急!dx3d 的问题

我顶,顶到解决为止

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20356
QQ
发表于 2003-8-20 12:42:00 | 显示全部楼层

Re: 急!dx3d 的问题

//-----------------------------------------------------------------------------
// Name: SetupMatrices()
// Desc: Sets up the world, view, and projection transform matrices.
//-----------------------------------------------------------------------------
VOID SetupMatrices()
{
    // For our world matrix, we will just rotate the object about the y-axis.
    D3DXMATRIXA16 matWorld;

    // Set up the rotation matrix to generate 1 full rotation (2*PI radians)
    // every 1000 ms. To avoid the loss of precision inherent in very high
    // floating point numbers, the system time is modulated by the rotation
    // period before conversion to a radian angle.
    UINT  iTime  = timeGetTime() % 1000;
    FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
    D3DXMatrixRotationY( &matWorld, fAngle );
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

    // Set up our view matrix. A view matrix can be defined given an eye point,
    // a point to lookat, and a direction for which way is up. Here, we set the
    // eye five units back along the z-axis and up three units, look at the
    // origin, and define "up" to be in the y-direction.
    D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
    D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
    g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

    // For the projection matrix, we set up a perspective transform (which
    // transforms geometry from 3D view space to 2D viewport space, with
    // a perspective divide making objects smaller in the distance). To build
    // a perpsective transform, we need the field of view (1/4 pi is common),
    // the aspect ratio, and the near and far clipping planes (which define at
    // what distances geometry should be no longer be rendered).
    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
    g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

这里是DX9 SDK的Tut03_Matrices例子中的代码片断,其中:

    UINT  iTime  = timeGetTime() % 1000;
    FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
    D3DXMatrixRotationY( &matWorld, fAngle );
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

这里用来做世界旋转的处理,把D3DXMatrixRotationY()改成D3DXMatrixRotationZ()看看是否可行。

6

主题

59

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2003-8-21 11:20:00 | 显示全部楼层

Re:急!dx3d 的问题

就是把D3DXMatrixRotationY()改成D3DXMatrixRotationZ()然后把
D3DXVECTOR3 vEyePt( 0.0f, 3.0f,-5.0f );
改为在z轴上便于观察
D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-5.0f );
只要不是在0度或180度,三角形旋转后看起来不再是正三角形了,
请sea_bug兄帮忙看看
其实是backbuffer的width和height不是一比一的缘故(窗口模式可以改为1:1但全屏好像不能为1:1),能给出避免的方案吗? [em7]
欢迎联系我
qq:30078150
msn:dengguoyu@msn.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-1 03:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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