OpenGL 案例金字塔、六边形、圆环的绘制

2020-07-13  本文已影响0人  蚂蚁安然

前言

Untitled.gif
最终实现的效果如上图所示,例子OpenGL图元绘制是这个例子

如图所示,整体的绘制流程如下


ChangeSize函数

在之前的demo中,changeSize主要是用来设置视口大小以及当视口发生变化时调用的,而本案例中立体图形的绘制需要使用投影矩阵,因此需要在该函数中设置投影矩阵
主要涉及以下几个步骤

//参数1:垂直方向上的视场角度
//参数2:视口纵横比 = w/h
//参数3:近裁剪面距离
//参数4:远裁剪面距离
viewFrustum.SetPerspective(35.0f, float(w)/float(h), 1.0f, 500.0f);
projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());

modelViewMatrix.LoadIdentity();

SetupRC函数

从流程图上可以看出,除了基本的背景色设置,存储着色器初始化以及顶点数据的创建及传输外,还需要对阵矩阵及观察者做一下设置

transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix);

其中,变换管道通过get可获得的矩阵有4种

方法 说明
void MoveForward(float fDelta) 向外移动的像素点,修改z
void MoveUp(float fDelta) 向上移动的像素点,修改y
void MoveRight(float fDelta) 向右移动的像素点,修改x

[图片上传中...(2251862-2ac84f6bd9deb88d.png-4f3fb-1594608365903-0)]

RenderScene函数
其流程如下所示,主要是立体图形的渲染过程

2251862-2ac84f6bd9deb88d.png

从流程图中可以看出,这个过程是将物体坐标转换为裁剪坐标,然后经过OpenGL的处理,转换为NDC,并显示到屏幕上的一个过程。在此过程中栈的变化如下所示

![2251862-f6d135374581a79b.png](https://img.haomeiwen.com/i3410830/a235552dc5eed3dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
modelViewMatrix.PushMatrix();
    M3DMatrix44f mCamera;
    cameraFrame.GetCameraMatrix(mCamera);
    modelViewMatrix.MultMatrix(mCamera);
上一篇 下一篇

猜你喜欢

热点阅读