首页 > openGL学习笔记(1)——常用方法原型解释

openGL学习笔记(1)——常用方法原型解释

        1、初始化,设置背景色

         void glClear(int mask)    清除缓存

         实參含义:GL10.GL_COLOR_BUFFER_BIT 清除颜色缓存

                       GL10.GL_DEPTH_BUFFER_BIT  清除深度缓存

         希望同时清除多个缓存,将实參用或(|)连接即可

         void glClearColor(float red,float green,float blue,float alpha)    设置背景色

 

       2、视点变换

        视点变换设置视点的位置和方向。视点默认位于坐标系原点,指向负z轴。

 

       3、模型变换(几何变换)

        模型变换在世界坐标系进行,物体模型原点默认在坐标系中心。有三个变换

        平移

        void glTranslatef(float x,float y,float z)

        实參为沿着x,y,z轴向右平移的距离

        旋转

        void glRotatef(float angle,float x,float y,float z)

        以原点和点(x,y,z)构成的直线为轴,逆时针旋转angle大小的角度

        缩放

        void glScalef(float x,float y,float z)

        实參为三轴上的缩放因子

 

       4、投影变换

        投影变换的目的是创建一个视景体,把视景体之外的场景裁剪掉。投影变换有两种,透视投影(perspective projection)和正交投影(orthographic projection)。

        透视投影

        void glFrustumf(float left, float right, float bottom, float top, float zNear, float zFar)

        正交投影

        void glOrthof(float left, float right, float bottom, float top, float zNear, float zFar)

 

       5、视口变换

        视口平面是视景体内的物体投影到的二维平面,视口变换就是调整视口大小。

        void glViewport(int x,int y,int width,int height)

        变换后的视口是以坐标(x,y)为左下顶点,宽为width,高为height的矩形

       6、裁剪变换

       7、矩阵栈操作

        openGL的变换矩阵为4*4矩阵

        设置当前矩阵

        void glLoadMatrixf(float[] m,int offset) 或者 void glLoadMatrixf(FloatBuffer m)    设置当前变换矩阵

        void glLoadIdentity()  设置当前矩阵为单位矩阵      

        压入、弹出矩阵

        void glPushMatrix()  依次压入当前所有矩阵

        void glPopMatrix()    弹出栈顶矩阵

        两个方法联合操作可以保留下次变换之前的矩阵状态。

 

       8、打开和关闭裁剪等功能

        打开

        void glEnable(int cap)

        实參含义:GL_CULL_FACE  打开背面剪裁

                      GL_DEPTH_TEST 打开深度测试

                      GL_DITHER        打开抗抖动

        关闭

        void glDisable(int cap)

 

      9、设置着色模型

        void glShadeModel(int mode)

        实參含义:GL_SMOOTH   平滑着色,根据三个顶点的颜色进行渐变着色,相邻两点之间的颜色平滑过渡

                       GL_FLAT        不平滑着色,使用最后一个顶点的颜色进行填充

 

       10、设置旋绕方向

        openGL默认多边形顶点逆时针排列为正面

        void glFrontFace(int mode)

        实參含义:GL_CW   顺时针为正面

                      GL_CCW 逆时针为正面

 

       11、设置矩阵模式

        void  glMatrixMode(int mode)

        实參含义:GL_MODELVIEW  设置为模型(几何)变换矩阵

                      GL_PROJECTION 设置为投影变换矩阵

                  

      12、绘图

       openGL绘图需要三个数组:顶点坐标数组,顶点颜色数组和顶点索引数组(索引可以不要)

       启用和禁用顶点数组       

       void glEnableClientState(int array)     启用

       实參含义:GL_VERTEX_ARRAY   启用顶点坐标数组

                     GL_COLOR_ARRAY   启用顶点颜色数组

       void glDisableClientState(int array)  禁用

       为画笔指定顶点坐标数据

       void glVertexPointer(int size,int type,int stride,Buffer pointer)

       形參含义:size为坐标维数(一般等于3),type为坐标值的类型(GL_FIXED代表int型,GL_FLOAT代表float型),stride为步长(连续顶点之间的间隔),pointer为顶点数据的buffer

      为画笔指定颜色顶点坐标数据

      void glColorPointer(int size,int type,int stride,Buffer pointer)      

      形參含义:同顶点指定方法,size一般等于4

      索引法绘图

      void glDrawElements(int mode,int count,int type,Buffer indices)

      形參含义:mode代表绘图方式,常见的方式有:GL_POINTS(画点),GL_LINES(每两点画一线段),GL_LINE_STRIP(按顺序相邻两点画一线段),GL_LINE_LOOP(按顺序相邻            顶点画一线段,末尾顶点与第一个顶点再画一线段),GL_TRIANGLES(每三个顶点画一三角形),GL_TRIANGLE_STRIP(按顶点顺序,每个顶点和它后面相邻的两个顶点画一三角形),GL_TRIANGLE_FAN(第一个顶点为共用顶点,其之后的顶点按照顺序每相邻两个和它构成一个三角形);

                    count代表索引数组的长度(不同于顶点个数)

                    type代表索引数据类型,如:GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT

                    indices代表索引数据的buffer

       非索引法绘图

       void glDrawArrays(int mode,int first,int count)

       形參含义:mode代表绘图方式

                     first代表第一个顶点的编号

                     count代表顶点个数   

    

转载于:https://www.cnblogs.com/yapollo/p/3537847.html

更多相关:

  • union { float data[4]; struct { float x; float y; float z; }; };...

  • 在立方体贴图空间内发射光线(视线),计算球面光线(视线)会击中哪个面的哪个像素的像素值,最终生成Equirectangular全景图。 InitSceneTexture():先获取Cubemaps并将其绑定在GPU中 void InitSceneTexture() {char* path = "./Cubemaps";myEnvi...

  • 对于同一场景的2D全景图,如果想改变其视野中心位置,比如下图,初始情况下视野的中心位置是蓝框,如果想让红框的灯位于中心位置该怎么做呢? #include "opencv2/highgui/highgui.hpp" #include "opencv2/opencv.hpp" #include

  • 常量内存是NVIDIA提供的一个64KB大小的内存空间,它的处理方式和普通的全局内存和共享内存都不一样,是有cuda专门提供的。 线程束的概念:线程束是指一个包含32个线程的集合,在程序中的每一行,线程束中的每个线程都将在不同的数据上执行相同的指令。 因此,常量内存的作用是,能够将单次内存的读取操作广播到每个半线程束(即16个线程...

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • 知识补充: 顶点数组对象:Vertex Array Object,VAO顶点缓冲对象:Vertex Buffer Object,VBO索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO 蓝色部分代表的是我们可以注入自定义的着色器的部分。 图形渲染管线的第一个部分是顶...

  • dijkstra是单源点最短路算法。 借图:   其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。 初始时,S中仅含有源。设u是G的某一个顶点,把从源到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组dist记录当前每个顶点所对应的最短特殊路径长度。D...