首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >穿山甲- s_cam vs d_cam -需要帮助理解两者的区别。

穿山甲- s_cam vs d_cam -需要帮助理解两者的区别。
EN

Stack Overflow用户
提问于 2020-11-08 21:39:11
回答 1查看 219关注 0票数 2

我正在努力提高使用穿山甲的速度。我从第一个例子开始:

https://github.com/stevenlovegrove/Pangolin/blob/master/examples/HelloPangolin/main.cpp

为了方便我会在这里复制:

代码语言:javascript
复制
#include <pangolin/pangolin.h>

int main( int /*argc*/, char** /*argv*/ )
{
    pangolin::CreateWindowAndBind("Main",640,480);
    glEnable(GL_DEPTH_TEST);

    // Define Projection and initial ModelView matrix
    pangolin::OpenGlRenderState s_cam(
        pangolin::ProjectionMatrix(640,480,420,420,320,240,0.2,100),
        pangolin::ModelViewLookAt(-2,2,-2, 0,0,0, pangolin::AxisY)
    );

    // Create Interactive View in window
    pangolin::Handler3D handler(s_cam);
    pangolin::View& d_cam = pangolin::CreateDisplay()
            .SetBounds(0.0, 1.0, 0.0, 1.0, -640.0f/480.0f)
            .SetHandler(&handler);

    while( !pangolin::ShouldQuit() )
    {
        // Clear screen and activate view to render into
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        d_cam.Activate(s_cam);

        // Render OpenGL Cube
        pangolin::glDrawColouredCube();

        // Swap frames and Process Events
        pangolin::FinishFrame();
    }
    
    return 0;
}

有了相关主题的背景,我可以理解这段代码的大部分工作,但是我不清楚s_camd_cam是什么,谁熟悉穿山甲就能解释这一点吗?

在有人说“阅读文档”之前,我确实构建了“穿山甲”文档,但这基本上只是列出了函数,并没有多大帮助。

另外,我应该指出,这对谷歌来说是一件困难的事情,因为穿山甲和动物的名字是一样的,而且还有一家生产激光产品的公司。

EN

回答 1

Stack Overflow用户

发布于 2022-06-06 04:31:15

您可以将s_cam视为摄像机的状态。它定义了相机和世界之间的关系。它由投影矩阵定义,它被定义为

代码语言:javascript
复制
OpenGlMatrixSpec pangolin::ProjectionMatrix(
int w,
int h,
double fu,
double fv,
double u0,
double v0,
double zNear,
double zFar
)

以及定义为ModelViewLookAt的

代码语言:javascript
复制
OpenGlMatrix pangolin::ModelViewLookAt(
double ex,
double ey,
double ez,
double lx,
double ly,
double lz,
double ux,
double uy,
double uz
)

总之,ModelViewLookAt接受3种类型的参数:摄像机在哪里?(3个参数),对象在哪里?(3个参数),摄像机在哪里?(3个params)。

另一方面,d_cam是您将要通过它看到的。基本上,按边界、纵横比和Handler显示配置。

边界可以看作是上下界在两个轴(自下而上,左-右).边界也包括纵横比。

处理程序帮助我们在Windows中创建一个交互式视图。

SetBounds定义

代码语言:javascript
复制
View & SetBounds (Attach bottom, Attach top, Attach left, Attach right, double aspect)

SetHandler定义

代码语言:javascript
复制
View & pangolin::View::SetHandler ( Handler * handler )

我希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64743308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档