GameDesign 板


LINE

※ [本文转录自 C_and_CPP 看板 #1GXI-BRO ] 作者: jack0820 (我想要P币....Orz) 看板: C_and_CPP 标题: [问题] openGL矩阵问题 时间: Mon Oct 22 19:35:37 2012 大家好 小弟最近正在试着看前辈写一些openGL的东西 在看的过程中遇到一些问题 想很久都搞不懂 觉得应该是观念问题 因此就上来请教大家了 流程大概是这样子的 我利用openGL的一些API 帮我设定一些顶点、颜色之类的 最後会透过GPU帮我画图 要透过GPU绘图 似乎是要透过GLSL来达成 简略的GLSL流程如下: //vertext shader uniform mat4 matModel; uniform mat4 matProj; uniform mat4 matProjModel; attribute vec4 vertex; void main() { ... vec4 tmp = matModel * vertex; gl_position = matProj * tmp; ... } 其实还有其他部分 但我只列出应该是有问题的地方@@ 其中 matModel、matProj都是可以利用openGL的API来设定 自己看的心得是openGL是先分别设定好matModel、matProj之後 才会在shader里面做相乘的动作 我想说这样子做应该会很耗费时间 所以想先在C code里面先设定好matProjModel = matProj * matModel 把matProjModel丢到shader 之後只要在 shader里面设定 gl_position = matProjModel * vertex; 这样就可以了 但是结果发现这样做的结果是错误的 看一下两个矩阵在c code里的值是固定的 不懂这样子为何会错? 简单来说 为何在c code里将两个矩阵相乘後再丢到shader的矩阵 会跟个别在c code里设定好矩阵然後再丢到shader透过shader帮我做相乘的结果会不相同 (其实也不能确定说结果不同,因为我无法在shader里将矩阵的值列印出来比较 但至少图形的结果显示会不一样就是了) 查一下矩阵乘法没有交换律,但有结合律 即A*(B*C) =(A*B)*C 所以这样做应该是没有问题 另外也检查过矩阵相乘,元素值应该是没乘错才对 不知道自己还有忽略了甚麽 所以来请教大家 如果讲的术语或观念有错也希望大家不吝指教 在此也先谢谢大家的帮忙罗 -- 如果爱情能像物理,我将不再困惑於迷惘 如果物理能解迷情,为了你,我愿意苦读物理 by 陈硕物理~=.= --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.179.30
1F:推 LPH66:也许是因为 openGL 的矩阵是 column major 的? 10/22 20:00
2F:推 Bencrie:推楼上,我觉得原 po 有可能乘错 XD 10/22 22:43
3F:→ Bencrie:编译环境没有 glu 可以用吗 ? 10/22 22:44
先感谢楼上两位大大回应 @@" 我本来也觉得是不是我矩阵乘错了 但对照一下应该是不会 (code不在手边~若有需要明天在贴上来@@) 我有看到一个比较奇怪的现象~提出来看看 不知道会不会帮助厘清问题? 之前有提到~ gl_Position = matProj * matModel * vertex 其中matModel为 [0.8, 0 , 0, 0] [0 , 0.5, 0, 0] [0 , 0 , 1, 0] [0.1, 0 ,-6, 1] 现在程式不在手边,所以只能凭印象打 @@ 详细的值忘了~但记得对角线与左下角是有值的 根据我查到的心得 是说对角线代表的是图的缩放 左下角三个值代表的是图位置的平移 (讲错请指正 @@) 这样的图画出来是显示在萤幕中间 而且图应该是在(0.1,0,-6)的位置 为了简化 我有试着先将 matModel设为单位矩阵 即对角线值全都是1,其他都是0 在 gl_Position = matProj * matModel * vertex 的设定下 依然可以看到图,只是图变很大 我的认知是因为z值由-6设为1,而且x,y尺度都设为1,所以图变大了 现在我用 gl_Position = matProjModel * vertex 即先在C code乘好矩阵再带进去 在matModel是单位矩阵的情况下也是可以看到一模一样的大图 但我将 matModel还原成原本有缩放以及有平移的情况 图就又看不到了 @_@ 顺便问一下~我知道经过投影矩阵变换之後 x,y,z范围都必须落在-1~1之间 那为啥之前平移设为(0.1,0,-6)依然也可以看到图呢? 究竟是哪边想错了呢? Orz ※ 编辑: jack0820 来自: 114.34.159.175 (10/23 00:07)



※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: jack0820 (114.34.159.175), 时间: 10/23/2012 00:13:19
4F:推 damody:在shader里面算不会比较慢喔 ~~ 10/24 22:39
5F:→ damody:x,y,z范围都必须落在-1~1之间 是对的 10/24 22:40
6F:→ damody:平移没问题是因为投影矩阵帮你投影回 -1~1 之间 10/24 22:40
7F:→ damody:model view 也有缩放 旋转 位移效果 10/24 22:41
8F:推 tsl3333:不是World Matrix的Scale Rot Translate相乘顺序错了 10/24 23:48
9F:→ tsl3333:不然就是View Matrix or Projection Matrix有地方有问题.. 10/24 23:49
10F:→ tsl3333:我觉得你可以先去了解一下图学的概念 再来做这个 10/25 00:10
11F:→ tsl3333:会对你比较有帮助 10/25 00:10
12F:→ tsl3333:http://ppt.cc/9h2F 10/25 00:16
13F:→ tsl3333:这里有跟你一样的问题 你要不要在检查一下你C++的矩阵乘法 10/25 00:16
14F:→ tsl3333:顺序的部分看看 10/25 00:24







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP