zoukankan      html  css  js  c++  java
  • OpenGL chapter4 基础变换

    math3d库有两个数据类型,能够表示一个三维或四维向量:
    M3DVector3f
    M3DVector4f

    4.3 理解投影
    正投影 : 正交变换
    透视投影 : 透视变换

    表4.1 OpenGL变换术语概览
    -------------------------------------------------------------
    | 变换 | 应用                                |
    ------------------------------------------------------------
    | 视图 | 指定观察者或照相机的位置                      |
    -------------------------------------------------------------
    | 模型 | 在场景中移动物体                          |
    -------------------------------------------------------------
    | 模型视图 | 描述视图和模型变换的二元性                     |
    -------------------------------------------------------------
    | 投影 | 改变视景体的大小或重新设置他的形状                   |
    -------------------------------------------------------------
    | 视口 | 这是一种伪变换,只是对窗口上的最终输出进行缩放           |
    -------------------------------------------------------------

    4.4.2 运用模型视图矩阵
    GLShaderManager::UseStockShader(GLT_SHADER_FLAT,M3DMatrix44f m,GLfloat vColor[4]);
    这个着色器在对图元进行渲染之前用每个向量乘以举证m。

    m3dTranslationMatrix44(mTranslationMatrix , xPos, yPos, 0.0f);
    shaderManager::UseStockShader(GLT_SHADER_FLAT,mTranslatonMatrix,vRed);
    squareBatch.Draw();

    4.5 更多对象
    GLBatch:这个类的目的是为了解决容纳一个顶点列表并将它们作为一个特定类型的图元批次来进行渲染。
    GLTriangleBatch:这个类专门作为三角形的容器,每个顶点都可以有一个表面法线,以进行光照计算和纹理坐标

    4.5.1 使用三角形批次类
    //首先 我们需要创建一个事件
    GLTriangleBatch myCoolObject;
    //然后通知容器最多打算使用的定点数,以开始创建网格
    myCoolObject.BeginMesh(200);
    //现在来添加三角形
    void GLTriangleBatch::AddTriangle(M3DVector3f verts[3], M3DVector3f vNormals[3] ,M3DVector2f vTexCoords[3]);
    //添加完成
    myCoolObject.End();
    //绘制
    myCoolObject.Draw();

    4.5.2 创建一个球体
    void gltMakeSphere(GLTriangleBatch& sphereBatch, GLfloat fRadius, GLint iSlices, GLint iStacks);

    4.5.3 创建一个环
    void gltMakeTorus(⋯⋯⋯⋯⋯⋯⋯⋯);

    4.5.4 创建一个圆柱或圆锥

    4.5.5 创建一个圆盘

    4.6 投影矩阵
    4.6.1 正投影
    我们使用math3d库或GLFrustum类来创建一个正投影矩阵
    GLFrustum::SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin,GLfloat zMax);

    4.6.2 透视投影
    我们使用GLFrustum 类来设置透视投影
    GLFrustum::SetPerspective(float fFov, float fAspect, float fNear, float fFar);

    4.6.3 模型视图投影矩阵(ModelViewProjection)

    4.7 变换管线
    4.7.1 使用矩阵堆栈
    GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
    void GLMaxtrixStack::LoadIdentity(void);
    void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
    void GLMatrixStack::MultMatrix(const M3DMatrix44f);
    const M3DMatrix44f& GLMatrixStack::GetMatrix(void);
    void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);

    压栈和出栈
    void GLMatrixStack::PushMatrix(void);
    void PushMatrix(const M3DMatrix44f mMatrix);
    void PushMatrix(GLFrame& frame);

    void GLMatrixStack::PopMatrix(void);

    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    IOS开发之WIFI及IP相关
    Git使用教程
    git push到GitHub的时候遇到! [rejected] master -> master (non-fast-forward)的问题 【转载】
    Linux高并发web服务器开发 【转载】
    Linux下open函数、read函数、write函数 【转载】
    Linux epoll 详解 【转载】
    Linux Socket 编程简介 【转载】
    信号量sem_init,sem_wait,sem_post
    linux线程之pthread_join和pthread_detach 【转载】
    C++ static类成员,static类成员函数 【转载】
  • 原文地址:https://www.cnblogs.com/zhaohu/p/7658358.html
Copyright © 2011-2022 走看看