- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎在使用 glGetFloatv 获取模型 View 矩阵时遇到了一些意想不到的麻烦(这也发生在尝试获取投影矩阵时)。
会发生什么?好吧,不管矩阵实际是什么,函数都会返回单位矩阵,甚至在平移和旋转之后立即返回!我知道这两个矩阵都不是单位矩阵,因为在游戏世界中移动时屏幕上的视觉效果完全符合预期。
我的函数是一小段 Common Lisp 代码(为了调试目的,修改后立即打印矩阵的语句),下面还有进一步的注释:
(defun apply-camera-gl (camera)
(declare (type scene-camera camera))
(declare (optimize (speed 3) (safety 1) (debug 3) (space 0)))
"Passes the necessary OpenGL commands to apply the position and fov for the camera."
(let ((pos (scene-camera-position camera))
(rot (scene-camera-rot camera))
(fov (scene-camera-fov camera)))
(declare (type single-float rot fov)
(type vec3 pos))
(gl:matrix-mode :projection)
(gl:load-identity)
(set-perspective fov +sr+ 0.1 24.0)
(gl:matrix-mode :modelview)
(gl:load-identity)
(gl:rotate -90.0 1.0 0.0 0.0)
(gl:rotate rot 0.0 0.0 1.0)
(gl:translate (- (the single-float (vec3-x pos)))
(- (the single-float (vec3-y pos)))
(- (the single-float (vec3-z pos))))
;; this always returns the following:
;; mv = #(1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0)
(format t "mv = ~a~%" (gl:get-float :modelview-matrix))
nil))
一些补充说明:
最佳答案
我找到了,我真的很尴尬,因为我发布了这个关于我的一个非常愚蠢的疏忽的大问题。但也许像我一样,将问题大声说出来,最终帮助我的大脑在睡了一夜之后理清第二天早上下一步该做什么。
所以发生了什么:它正在返回单位矩阵,因为我忘记了,很多个月前,我在我的代码中其他地方的一个更广泛的外壳中调用了 apply-camera-gl 函数,在它正在构建的另一个文件中一个显示列表,旋转和平移作为显示列表本身的一部分(如果这对任何人来说听起来很奇怪,该游戏是一个逐步移动的游戏,与飞行模拟或 FPS 不同)。
在显示列表构造 block 中,OpenGL 命令不会立即执行。
我重新安排了另一个文件中的代码,以便在任何显示列表构造外壳之外调用 apply-camera-gl... 现在它得到了预期的矩阵,因为平移和旋转是立即调用而不是延迟直到每当 (gl:call-list ...) 发生。从现在开始,我将专门为几何使用显示列表——或者更好的是,完全停止使用它们并为几何使用 VBO。
这也解释了为什么它在项目的其他地方返回单位矩阵,我把它放在 apply-camera-gl 以外的地方——它们都恰好在显示列表构造 block 下,我上次甚至没有意识到夜晚(故事的寓意:“隧道视野”是真实存在的)
抱歉,这个问题可能会被关闭。
关于OpenGL 总是在 cl-opengl(Common Lisp)中为 glGetFloatv GL_MODELVIEW_MATRIX 返回单位矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250616/
我正在尝试将立方体的位置存储在值 x 中,当我尝试使用 print(x) 而不是打印位置时,它会打印 额外信息: Windows 8.1 64-Bit Python 3.4.3 32-Bit PyO
我似乎在使用 glGetFloatv 获取模型 View 矩阵时遇到了一些意想不到的麻烦(这也发生在尝试获取投影矩阵时)。 会发生什么?好吧,不管矩阵实际是什么,函数都会返回单位矩阵,甚至在平移和旋转
我是一名优秀的程序员,十分优秀!