长风破浪会有时,直挂云帆济沧海

Dream Word

博客园 首页 新随笔 联系 订阅 管理

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);

posted on 2017-10-12 21:46  长风II  阅读(231)  评论(0编辑  收藏  举报