一. MVP矩阵
●本质上是一个变换矩阵。
●将一个世界坐标系的点转换裁剪空间的点
●3D物体从建模到最终显示到屏幕上过程需要经历以下的阶段
。对象空间(Object Space)
。世界空间(World Space)
。照相机空间(Camera Space)
。裁剪空间(Clipping Space)
。视口空间(viewPort)
从对象空间->世界空间 Model to World
从世界空间->照相机空间 world to View
从照相机空间->裁剪空间 view to Projection
//GLSL顶点着色器
gl_Position = p * mvp;
二. GLKMatrix4MakeLookAt方法
GLKMatrix4MakeLookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX,float upY,floatupZ) ;
参数1: eyeX,眼睛位置的X坐标
参数2: eyeY,眼睛位置的Y坐标
参数3: eyeZ,眼睛位置的Z坐标
参数4: centerX,正在观察点的X坐标
参数5: centerY,正在观察点的Y坐标
参数6: centerZ,正在观察点的Z坐标
参数7: upX,摄像机上向量的x坐标
参数8: upY,摄像机上向量的Y坐标
参数9: upZ,摄像机上向量的Z坐标
等价于OpenGL中的一个函数g luLookAt()
void gluLookAt(float eyeX, float eyeY, float eyeZ,float centerX,float centerY, float centerZ, float upX, float upY, float upZ)
你可以把相机/摄像机/观察者想像成帅气的脑袋!
第一组参数:eyeX/eyeY/eyeZ脑袋的位置
第二组参数: centerX/ centerY/centerZ眼睛所看物体的位置
第三组参数:upX/upY/upZ头顶的朝向的方向(因为你有可能偏着头看物体)
●目的:返回一个4 * 4的矩阵变换的世界坐标系坐标
●默认情况下,(0,1,0)
三.顶点数据对象切换VAO/VBO
VBO:顶点缓存区对象(ouffer Object)
VAO:(顶点数据对象) Vertex Array Object不能单独使用,都是和VBO结合使用.
●那我们什么时候使用VBO ?
glBindBuffer(GL_ARRAY_BUFFER,VBO);
glBufferData()
glVerterAttribPointer()
VAO (Vertex Array Object )是OpenGL用来处理顶点数据的一个缓冲区对象,它不能单独使用,都是结合VBO来一起使用的。 VAO是OpenGL CoreProfle引入的一个特性。事实上在CoreProfle中做顶点数据传入时,必须使用VAO方式。
当我们使用VBO传入顶点数据时,一般的处理如下:
// "绑定VBO,设置VB0中的数据
glBindBuffer(GL_ARRAY_BUFFER,VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 1.设置顶点属性
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
// 2.使用Shader程序
glUseProgram(shaderProgram);
// 3.绘制
someOpenGLFunctionThatDrawsourTriangle();
VAO包含的内容
VAO对象中存储的内容包括:
- VAO开启或者关闭的状态(glEnableVertexAttribArray和glDisableVertexAttribArray)
2.使用glVertexAttribPointer对顶点属性进行的设置
3.存储顶点数据的VBO对象
另外需要注意的是,当我们使用EBO的时候,VAO中也会记录索引信息,因此完整的VAO所包含的内容图如下所示(添加了EBO):
网友评论