游戏开发论坛

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

CD3DArcBall里面有点疑问,屏幕坐标转换到世界矩阵

[复制链接]

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2005-11-25 20:07:00 | 显示全部楼层 |阅读模式
我猜想大概这个函数功能就是将屏幕上一点转换为以世界坐标原点(0,0,0)为原点,指向该点的一个向量。
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 );
}

这样它得到屏幕上两个点后就得到从原点发出的两条射线,就可以cross,dot后得到要旋转的轴和旋转的角度。但是这个转换的过程我就看不懂了,感情他这个跟view,proj矩阵都没关系了,是怎么转的哦

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2005-11-26 09:43:00 | 显示全部楼层

Re:CD3DArcBall里面有点疑问,屏幕坐标转换到世界矩阵

这个没人看么?就算没看过MS的例子,看看这个代码也应该能知道一二吧.
达人们快来呀

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-11-26 10:22:00 | 显示全部楼层

Re:CD3DArcBall里面有点疑问,屏幕坐标转换到世界矩阵

屏幕坐标系-〉投影空间。
垃圾,胡乱猜测一下。

31

主题

104

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2005-11-28 10:26:00 | 显示全部楼层

Re:CD3DArcBall里面有点疑问,屏幕坐标转换到世界矩阵

我也觉得是在乱猜

12

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2005-11-28 17:14:00 | 显示全部楼层

Re:CD3DArcBall里面有点疑问,屏幕坐标转换到世界矩阵

大哥们都在乱猜哦?感觉这个类的效果还不错,不用得到VIEW,PROJ矩阵就能对屏幕坐标进行转换,可是始终无法知道它转换的原理,其实我就是想将之改造成不是以(0,0,0)为原点,而是以当前摄像机的位置为原点的一个控制球,看来不用view,proj是没办法了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 18:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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