游戏开发论坛

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

求救一个简单的《矩阵变换》问题呀~

[复制链接]

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-7-11 20:04:00 | 显示全部楼层 |阅读模式
rt
在矩阵变换点坐标的时候,是不是用 “新的点坐标向量=原来的点坐标向量*变换矩阵” 就可以了呢?如果是这样的原理的话,那么我的程序中就是这么弄的,但三角形始终不转啊,不知道为什么呢?下面是有关的代码,是凭着这个想法写的,并没有用世界矩阵的方法去变换。
    CUSTOMVERTEX vertices[] =
    {
        { 0.0f,  1.0f, 0.5f,  D3DCOLOR_XRGB(255,0,0), }, // x, y, z, color
        { 0.5f, 0.0f, 0.5f, D3DCOLOR_XRGB(255,0,0), },
        { -0.5f, 0.0f, 0.5f, D3DCOLOR_XRGB(255,0,0), },
    };

        D3DXMATRIX mat;
    UINT  iTime  = timeGetTime() % 1000;
    FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0f;
    D3DXMatrixRotationZ( &mat, fAngle );

    VOID* pVertices;

        D3DXVECTOR3        vect1(vertices[0].x, vertices[0].y, vertices[0].z);
        D3DXVECTOR3        vect2(vertices[1].x, vertices[1].y, vertices[1].z);
        D3DXVECTOR3        vect3(vertices[2].x, vertices[2].y, vertices[2].z);

        D3DXMatrixMultiply( &(D3DXMATRIX)vect1, &(D3DXMATRIX)vect1, &mat );
        D3DXMatrixMultiply( &(D3DXMATRIX)vect2, &(D3DXMATRIX)vect2, &mat );
        D3DXMatrixMultiply( &(D3DXMATRIX)vect3, &(D3DXMATRIX)vect3, &mat );


        vertices[0].x = vect1.x;
        vertices[0].y = vect1.y;
        vertices[0].z = vect1.z;

        vertices[1].x = vect2.x;
        vertices[1].y = vect2.y;
        vertices[1].z = vect2.z;

        vertices[2].x = vect3.x;
        vertices[2].y = vect3.y;
        vertices[2].z = vect3.z;

我都哭死了,没办法转起来啊
  [em17] [em17] [em17] [em17] [em17]

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-7-11 20:35:00 | 显示全部楼层

Re: 求救一个简单的《矩阵变换》问题呀~

问题貌似解决了...是我自己编了一个向量与矩阵相乘的函数解决的,不知道D3DAPI中有没有这样的函数啊,我自己编的函数代码如下:(也许效率很低哦,想用API自带的,也许能快很多)

D3DXVECTOR3* VectMat4x4Mul( D3DXVECTOR3* Mat1 , D3DXMATRIX* Mat2 )
{
        float        t11 , t12 , t13;

        D3DXVECTOR3* temp = new D3DXVECTOR3();

        t11 = (Mat1->x * Mat2->_11) + (Mat1->y * Mat2->_21) + (Mat1->z * Mat2->_31) + Mat2->_41;
        t12 = (Mat1->x * Mat2->_12) + (Mat1->y * Mat2->_22) + (Mat1->z * Mat2->_32) + Mat2->_42;
        t13 = (Mat1->x * Mat2->_13) + (Mat1->y * Mat2->_23) + (Mat1->z * Mat2->_33) + Mat2->_43;

        temp->x = t11;
        temp->y = t12;
        temp->z = t13;

        return        temp;
}

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-7-11 20:39:00 | 显示全部楼层

Re:求救一个简单的《矩阵变换》问题呀~

有哪位大人可以给个API里的函数啊,那个D3DXMatrixMultiply不行啊,谢谢啦!

22

主题

274

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2006-7-12 12:39:00 | 显示全部楼层

Re:求救一个简单的《矩阵变换》问题呀~

D3DXMatrixMultiply( &(D3DXMATRIX)vect1, &(D3DXMATRIX)vect1, &mat );
D3DXMatrixMultiply( &(D3DXMATRIX)vect2, &(D3DXMATRIX)vect2, &mat );
D3DXMatrixMultiply( &(D3DXMATRIX)vect3, &(D3DXMATRIX)vect3, &mat );
...这是什么...-_-''

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2006-7-12 17:13:00 | 显示全部楼层

Re:求救一个简单的《矩阵变换》问题呀~

D3DXVec3Transform

9

主题

198

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2006-7-12 17:41:00 | 显示全部楼层

Re:求救一个简单的《矩阵变换》问题呀~

D3DXVec3Transform是可以达到你所需要的效果的。D3DXMatrixMultiply这个函数是用来做矩阵乘法的,但是不支持4x1列矩阵或1x4行矩阵与4x4矩阵相乘的。
其次你所写的函数与D3DXVec3Transform的功能是一样的,但是你的函数存在内存泄漏的潜在的问题。
希望这些对你有帮助。

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-7-12 23:12:00 | 显示全部楼层

Re:求救一个简单的《矩阵变换》问题呀~

请问取景变换中观察点的坐标,被观察点的坐标,虚拟相机的向上向量,这三个向量是怎样运算得到观察矩阵的?

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-7-14 11:48:00 | 显示全部楼层

Re:求救一个简单的《矩阵变换》问题呀~

多谢各位大人!
limingbo说的确实是这样,我分配了内存空间却没定义什么时候释放,应该在调用前分配空间然后把数值传出去!后来我做了修改。
至于楼上的大人问的问题,我觉得只要用API中的函数就可以了吧 ,如果是问具体怎么实现的那我也不知道哦!
再次,我对比了一下D3DXVec3Transform和我自己编的函数,测试结果效率是一样的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 23:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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