2013-07-10 50 views
1

Im在计算顶点的屏幕坐标时遇到问题。这不是一个特别的webgl问题,更多的是一个普通的3d图形问题。webgl - 模型坐标到屏幕坐标

矩阵变换的那Im使用序列为:

result_vec4 = perspective_matrix * camera_matrix * model_matrix * vertex_coords_vec4

model_matrix作为一个顶点的在其本地坐标系中的变换到全局场景坐标系统。 所以我的理解是,最终result_vec4是在剪辑空间?这应该在[-1,1]范围内。这不是我得到的结果... result_vec4最终只包含一些coords的标准值,并不对应于顶点的正确屏幕位置。

没有人有任何想法可能是什么问题吗? 非常感谢你的任何想法。

回答

1

要转到剪裁空间,你需要在超平面w=1项目result_vec4使用:

result_vec4 /= result_vec4.w 

通过应用这个角度划分result_vec4.xyz将在[-1,1]。

+0

result_vec4.w有一些“!= 1”值?当你说“......提供一个能实现这个目标的perspective_matrix”时,我也不清楚你的意思。非常感谢你的回答:) – deepblue

+0

@deepblue result_vec4.w有一些“!= 1”值?这是否在投影(分区)之后发生?如果是这样的话,特别是如果编译器预先计算1/w,那么可能会发生,然后使用产品。但值应该接近1.f。我将删除令人混淆的“提供一个透视图矩阵,实现如此” –

+0

我问的“!= 1”问题令人困惑。一切都很好,并按我的预期工作。我只是认为'w'会有1的价值,所以我很困惑为什么我们应该用1来分割......但那不是价值,所以它是有效的。谢谢你的回答,你帮了很多:)最好。 – deepblue