MipMap贴图原理

来源:互联网 发布:淘宝卖家跑路了 编辑:程序博客网 时间:2024/06/09 17:17

#include <GL/glut.h>#define mPoint 1void d1(){glClear(GL_COLOR_BUFFER_BIT);//用这个方法将背景换乘绿色glColor3f(0.0,1.0,0.0);glBegin(GL_POLYGON);glVertex2f(-mPoint,-mPoint);glVertex2f(-mPoint,mPoint);glVertex2f(mPoint,mPoint);glVertex2f(mPoint,-mPoint);glEnd();glColor3f(1.0,0.0,0.0);glPointSize(10);glBegin(GL_POINTS);glVertex2f(0.5,0.5);//glVertex2i(1.0,1.0);glEnd();glFlush();}int main(int argc,char **argv){glutInit(&argc,argv);//glutSizeWindow(500,500);glutCreateWindow("hello!");glutDisplayFunc(d1);glutMainLoop();}//////////////////////////////////////////////GL.PushMatrix();mat.SetPass(0);GL.LoadOrtho();GL.Begin(GL.QUADS);GL.Color(Color.red);GL.Vertex3(0,0.5,0);GL.Vertex3(0.5,1,0);GL.Vertex3(1,0.5,0);GL.Vertex3(0.5,0,0);GL.Color(Color.cyan);GL.Vertex3(0,0,0);GL.Vertex3(0,0.25,0);GL.Vertex3(0.25,0.25,0);GL.Vertex3(0.25,0,0);GL.End();GL.PopMatrix();1 MipMap贴图原理   *****   在图形学中,我们经常会用到纹理贴图(注意:图形学中的纹理与图像学中的是两个概念,图像中一般将图片中较复杂的区域,即频谱能量高的,称为纹理;图形学中将用来贴图的图片统称为纹理),用来贴图的纹理大小与真正要render的区域不一定是刚好匹配的,这样就需要做放大或缩小,如果缩小,也就会产生上面所述的混叠现象。   在图像学中,图像缩小时产生的混叠常用一些低通滤波器来减轻,即在缩小前先将图像做一个低通滤波。2 OpenGL超级宝典笔记——纹理映射Mipmap  *****            https://my.oschina.net/sweetdark/blog/1778123 OpenGL学习 将不同纹理映射到不同面上  **                http://blog.csdn.net/chenqiai0/article/details/83137764 图像重采样插值算法简介算法 说明 (1)最近相邻插值:Nearest Neighbour Interpolation 优点是计算量很小,算法简单,运算速度较快。但它仅使用离待测采样点最近的像素的颜色值作为该采样点的颜色值,而没考虑其他相邻像素点的影响,因而重新采样后颜色值有明显的不连续性,图像质量损失较大,会产生明显的马赛克和锯齿现象。 (2)两次线性插值:Bilinear Interpolation  2x2 average  average four pixels 计算量稍大,基本克服了最近相邻插值算法颜色值不连续的特点,因为它考虑了待测采样点周围四个直接邻点对该采样点的相关性影响。但是,此方法仅考虑待测样点周围四个直接邻点颜色值的影响, 而未考虑到各邻点间颜色值变化率的影响, 因此具有低通滤波器的性质,从而导致缩放后图像的高频分量受到损失, 图像边缘在一定程度上变得较为模糊。 (3)两次立方插值:Bicubic Interpolation8x8 [with sharpening]4x4 filter [with sharpening] 计算量最大,算法也最为复杂的。在几何运算中,两次线性插值算法的平滑作用可能会使图像的细节产生退化,在进行放大处理时,这种影响更为明显。在其他应用中,两次线性插值算法的斜率不连续性会产生不希望的结果。两次立方插值算法不仅考虑到周围四个直接相邻像素点颜色值的影响,还考虑到它们颜色值变化率的影响。因此克服了前两种方法的不足之处,能够产生比两次线性插值更为平滑的边缘,计算精度很高,处理后的图像像质损失最少,效果是最佳的。glvertex2f()干什么用的?    OpenGL中用来画点的库函数glvertex---OpenGL中一系列画点函数共通名2---函数有两个参数,同时,2代表的是二维坐标,3代表三维坐标f---两个参数都是浮点型GL.QUADS 四边形基本库  2.几何图元类型和说明  类型 说明  GL_POINTS 单个顶点集  GL_LINES 多组双顶点线段  GL_POLYGON 单个简单填充凸多边形  GL_TRIANGLES 多组独立填充三角形  GL_QUADS 多组独立填充四边形  GL_LINE_STRIP 不闭合折线  GL_LINE_LOOP 闭合折线  GL_TRIANGLE_STRIP 线型连续填充三角形串  GL_TRIANGLE_FAN 扇形连续填充三角形串  GL_QUAD_STRIP 连续填充四边形串例如画一个五角星glClear(GL_COLOR_BUFFER_BIT);     // 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出     glBegin(GL_LINE_LOOP);//依次一个点连一个点         glVertex2fv(PointA);         glVertex2fv(PointC);         glVertex2fv(PointE);         glVertex2fv(PointB);         glVertex2fv(PointD);     glEnd();     glFlush();///////////////////////////////////////////void myDisplay(void){     glClear(GL_COLOR_BUFFER_BIT);     glRectf(-0.5f, -0.5f, 0.5f, 0.5f);     glFlush();}int main(int argc, char *argv[]){     glutInit(&argc, argv);     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);     glutInitWindowPosition(100, 100);     glutInitWindowSize(400, 400);     glutCreateWindow("第一个OpenGL程序");     glutDisplayFunc(&myDisplay);     glutMainLoop();     return 0;}这个阶段我们要做练习,其实就是改一改myDisplay这个函数的实现

原创粉丝点击