游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3214|回复: 9

初学OPENGL 请教一个过程的意思?

[复制链接]

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2006-8-30 02:24:00 | 显示全部楼层 |阅读模式
//过程

void inverseTranslateVect( float *mat,floatl *pVect )
{
        pVect[0] = pVect[0]-mat[12];
        pVect[1] = pVect[1]-mat[13];
        pVect[2] = pVect[2]-mat[14];
}
//mat 是个矩阵 类似于 float mat[16];

//mat 矩阵定义如下:
//   | m0    m1    m2    m3   |      
//   | m4    m5    m6    m7   |
//   | m8    m9    m10  m11  |
//   | m12  m13  m14   m15 |

//pvect 是个向量  类似于:pvect[3]={1,2,3}

那位大虾能帮我解释一下在3D 环境中它到底表示什么意思?这样有什么意义?

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2006-8-30 02:25:00 | 显示全部楼层

Re: 初学OPENGL 请教一个过程的意思?

//应该是 这样的过程

void inverseTranslateVect( float *mat,float  *pVect )
{
pVect[0] = pVect[0]-mat[12];
pVect[1] = pVect[1]-mat[13];
pVect[2] = pVect[2]-mat[14];
}
//mat 是个矩阵 类似于 float mat[16];

//mat 矩阵定义如下:
//   | m0    m1    m2    m3   |      
//   | m4    m5    m6    m7   |
//   | m8    m9    m10  m11  |
//   | m12  m13  m14   m15 |

//pvect 是个向量  类似于:pvect[3]={1,2,3}

那位大虾能帮我解释一下在3D 环境中它到底表示什么意思?这样有什么意义?

41

主题

184

帖子

184

积分

注册会员

Rank: 2

积分
184
发表于 2006-8-30 10:39:00 | 显示全部楼层

Re:初学OPENGL 请教一个过程的意思?

mat应该为一个平移矩阵,它的形势如下

| m0    m1    m2    m3   |      
| m4    m5    m6    m7   |
| m8    m9    m10  m11  |
| m12  m13  m14   m15 |
标准的形势如下M=
| 1    0    0    x   |      
| 0    1    0    y   |  
| 0    0    1    z   |  
| 0    0    0    1   |  
它的索引为
| 0 4 8  12  |
| 1 5 9  13  |
| 2 6 10 14 |
| 3 7 11 15 |
其中x,y,z为向量P=(p1,p2,p3,1)的平移量,即
M*P=(p1+x,p2+y,p3+z,1)

上面过程的逆,就是你写的函数

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2006-8-30 13:13:00 | 显示全部楼层

Re:初学OPENGL 请教一个过程的意思?


我记得平移矩阵的的定义应该是:
| 1    0    0    0   |      
| 0    1    0    0   |  
| 0    0    1    0   |  
| x    y    z     1   |  

怎么标准为:
| 1    0    0    x   |      
| 0    1    0    y   |  
| 0    0    1    z   |  
| 0    0    0    1   |  ?????真的不知道。 请帮忙解释一下

41

主题

184

帖子

184

积分

注册会员

Rank: 2

积分
184
发表于 2006-8-30 13:23:00 | 显示全部楼层

Re:初学OPENGL 请教一个过程的意思?

这个是D3D中的定义,在OpenGL中采用矩阵右乘,你可以参考图形学的教科书

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2006-8-30 13:49:00 | 显示全部楼层

Re:初学OPENGL 请教一个过程的意思?

在我的程序里面,矩阵的计算方式都是我自己写的,而我的所有矩阵的定义和计算都是根据
| 0 4 8  12  |
| 1 5 9  13  |
| 2 6 10 14 |
| 3 7 11 15 |
的格式,例如我的平移就这样
| 0 4 8  12  |
| 1 5 9  13  |
| 2 6 10 14 |
| x y  z   15 |
这样有问题吗?

21

主题

100

帖子

100

积分

注册会员

Rank: 2

积分
100
QQ
发表于 2006-8-30 15:44:00 | 显示全部楼层

Re:初学OPENGL 请教一个过程的意思?

DancingWind正解。实在不明白楼上所说的意思

41

主题

184

帖子

184

积分

注册会员

Rank: 2

积分
184
发表于 2006-8-30 17:03:00 | 显示全部楼层

Re:初学OPENGL 请教一个过程的意思?

没有,如果你要全部使用自己的定义,就不要管别人的实现。

看懂它们的,在用你自己的实现,不就完了

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2006-8-30 20:44:00 | 显示全部楼层

Re: Re:初学OPENGL 请教一个过程的意思?

Symphonia: Re:初学OPENGL 请教一个过程的意思?

DancingWind正解。实在不明白楼上所说的意思


这个存在什么问题吗?
| 1    0    0    x   |      
| 0    1    0    y   |  
| 0    0    1    z   |  
| 0    0    0    1   |
这种矩阵是数学上的矩阵, 所以说是标准矩阵, 楼主可以看看线性代数和计算机图形学的书,里面都是这样写的.

| 1    0    0    0   |      
| 0    1    0    0   |  
| 0    0    1    0   |  
| x    y    z     1   |  
至于这种,是上面那种的转置矩阵.
在OpenGL中矩阵的格式是标准矩阵的转置矩阵, 也就是说一个标准矩阵如果在OpenGL中使用的话, 就得写成这种样子.(如果使用带有Transpose的函数除外)

29

主题

97

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2006-8-31 12:49:00 | 显示全部楼层

Re:初学OPENGL 请教一个过程的意思?

o ,谢谢 DancingWind 和 cO_olWinD.我明白了.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 05:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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