【问题标题】:Camera in OpenGL ESOpenGL ES 中的相机
【发布时间】:2013-06-25 14:24:11
【问题描述】:

我有一个场景如下:

一个 3D 盒子,其底部以原点为中心,四个矩形围绕盒子底部。我们可以把它想象成一座四面都有街道的建筑。我想得到投影视图模型矩阵。我已经根据相机设置准备了投影和视图矩阵,但不确定模型矩阵。场景中的每个对象会具有不同的模型矩阵还是整个场景只有一个模型矩阵?

立方体和矩形的模型矩阵是什么?

我希望在建筑物四个侧面的街道上移动相机。

【问题讨论】:

    标签: opengl-es rendering perspectivecamera pandaboard 3d-rendering


    【解决方案1】:

    这可以通过任何一种方式完成,但我建议为每个建筑物(立方体)设置一个单独的模型矩阵,它可能只包含翻译。每一个都会有不同的翻译。然后,在使用 glDrawArrays() 绘制每个模型矩阵之前,依次将每个模型矩阵传递给顶点着色器。您的相机位置应该进入视图投影矩阵,该矩阵也传递给顶点着色器,但仅在相机实际移动时更新。然后,您的顶点着色器必须将模型和视图投影矩阵相乘。这会将必须的工作放入着色器中,它应该在哪里。

    【讨论】:

    • 翻译应该从哪里开始,盒子的中心和矩形到原点?
    • 是的,完全正确。这使得缩放或旋转整个场景变得容易,例如,通过将所有模型矩阵乘以单个缩放或旋转矩阵,或两者兼而有之。
    • 所以,我会做这样的事情。 PVRTMat4 ViewMatrix = PVRTMat4::LookAtRH(vFrom, vTo, vUp); PVRTMat4 ProjectionMatrix =PVRTMat4::PerspectiveFovRH(DEG2RAD(fFOV), AspectRatio, CameraNear, CameraFar, PVRTMat4::OGL, rotate); for(i=0;iModelMatrixViewMatrix; glUniformMatrix4fv(i32Location, 1, GL_FALSE, PMVMatrix.ptr());这是正确的吗?
    • 是的,PowerVR SDK 中的许多示例都是这样做的。那里有很多很好的例子。但是,将更多的矩阵乘法移动到顶点着色器会更好。
    猜你喜欢
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多