游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1302|回复: 0

ScreenToVector()是干什么的?

[复制链接]

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2006-9-7 18:22:00 | 显示全部楼层 |阅读模式
DX9中Samples->EffectParam.cpp里的东西,请指点一二三.
1.
D3DXMATRIXA16 mViewRotate = *g_Camera.GetViewMatrix();
    mViewRotate._41 = mViewRotate._42 = mViewRotate._43 = 0.0f;
D3DXMatrixInverse( &mViewRotate, NULL, &mViewRotate );
    if( g_ArcBall.GetSize() > 0 )
        g_ArcBall[g_nActiveMesh].HandleMessages( hWnd, uMsg, wParam, lParam, &mViewRotate );
   return 0;
把元素_41,_42,_43赋为0.0起什么作用呀?

2.
(DXUTmisc.cpp)
D3DXVECTOR3 CD3DArcBall::ScreenToVector( float fScreenPtX, float fScreenPtY )
{
    // Scale to screen
    FLOAT x   = -(fScreenPtX - m_Offset.x - m_nWidth/2)  / (m_fRadius*m_nWidth/2);
    FLOAT y   =  (fScreenPtY - m_Offset.y - m_nHeight/2) / (m_fRadius*m_nHeight/2);

    FLOAT z   = 0.0f;
    FLOAT mag = x*x + y*y;

    if( mag > 1.0f )
    {
        FLOAT scale = 1.0f/sqrtf(mag);
        x *= scale;
        y *= scale;
    }
    else
        z = sqrtf( 1.0f - mag );

    // Return vector
    return D3DXVECTOR3( x, y, z );
}
这是将屏幕上的点转变为3D向量吧.
(PIONT)  m_Offset.x,m_Offset.y 代表什么?
FLOAT x ,FLOAT y 为什么要这样赋值?

3.
如果要实现分别绕X,Y,Z轴拖动旋转,怎么做?就象3DSMAX中那样.

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 08:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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