OpenGL笔记(4)纹理】的更多相关文章

纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将这个纹理数据渲染出来,这个过程有点像装修工人给墙体贴瓷砖,而瓷砖好比作纹理. 纹理坐标 如果为了将一副纹理图贴到Opengl绘制的一个矩形上,那么就需要解决一个问题,如何知道矩形的具体某个点对应纹理图的某个点呢?为了解决这个问题就引出了纹理坐标, 通过矩形的顶点坐标与纹理坐标关联,这样就明确了每个顶…
重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix glLoadIdentity(); // First, transform the camera (viewing matrix) from world space to eye space // Notice all values are negated, because we move the w…
1.把纹理载入进OpenGL中 我们的第一个任务就是把一个图像文件的数据载入到一个OpenGL的纹理中. 作为開始.让我们又一次舍弃第二篇的框架.又一次创建一个程序,新建一个util工具包,在该包下创建一个新类TextureHelper,我们将以以下的方法签名開始: public static int loadTexture(Context context,int resourceId){} 这种方法会把Android上下文.和资源ID作为输入參数,并返回载入图像的OpenGL纹理的ID.開始时…
纹理 在之前的实践中,我们所渲染的物体的表面颜色都是纯色或者根据顶点位置计算出的一个颜色,这种方式在表现物体细节方面是比较吃资源的,因为我们每增加一个细节,我们就需要定义更多的顶点及其属性.所以美术人员和程序员更多的是使用纹理来表现模型的细节. 纹理简单来说就是一个二维图片,OpenGL通过顶点的UV坐标把图片的内容贴到物体的表面,这样我们只需要少量的顶点和一张贴图就可以表现出足够的细节.可以想象一下,有一面墙,每一块转的纹理不同,如果使用增加顶点数据的方式来渲染,需要的数据不可预计,但如果使用…
1:opengl 多线程共享纹理纹理: //解码时候使用opengl进行绘制,需要构建队列和两个线程,分别用于解码数据并且填充纹理和渲染. 主线程常见两个共享上下文: main() { ⋯⋯⋯⋯ gHdc = wglGetCurrentDC(); gHRC1 = wglCreateContext(gHdc); gHRC2 = wglCreateContext(gHdc);; wglShareLists(gHRC1,gHRC2); ⋯⋯⋯⋯ exit: wglMakeCurrent(NULL,NU…
GLTools: 一些有用且可复用的函数 GLEW: OpenGL API的一些扩展机制 GLUT: OpenGL Utility toolkit, OpenGL跨平台相关,隐藏平台相关细节 RC代表渲染环境(Rendering Context),是运行中的OpenGL状态机句柄 使用OpenGL绘制三角形: // Triangle.cpp // Our first OpenGL program that will just draw a triangle on the screen. #inc…
关于纹理 一般游戏里的物体不一定都是纯色的物体,物体上面会有一些图片贴在上面,比如墙壁,箱子,地板,可以看到砖头.木板和大理石组成的图片,要把图片贴到计算机里的几何图形的话,就要把图片的颜色采样贴到几何图形上,采样是计算机经常干的工作,计算机要处理自然中的数据就需要对数据进行采样,比如说对声音采样就是采集声音的频率和频幅,分别代表声音的音色和声量,当然,采集到的是一个模拟量,然而计算机无法处理模拟量,所以需要将模拟量量化为数字量,也就是二进制数进行存储,同理,颜色也是一样,现代计算机中颜色一般以…
目录[-] 光源视角 新型的纹理 深度纹理的大小 首先绘制阴影 然后是光照 投影阴影贴图 阴影比较 之前我们介绍过简单的把物体压平到投影平面来制造阴影.但这种阴影方式有其局限性(如投影平面须是平面).在OpenGL1.4引入了一种新的方法阴影贴图来产生阴影. 阴影贴图背后的原理是简单的.我们先把光源的位置当作照相机的位置,我们从这个位置观察物体,我们就知道哪些物体的表面是被照射到(被光源看到) 的,哪些是没有被照射到(被遮挡住)的(在某个方向上离光源最近的表面是被照射的,后面的表面则没有被照射到…
纹理单元的理解 Shader中要用到纹理: uniform sampler2D texture1; Main读取图片数据,创建了纹理: unsigned int texture1; 怎么把c++里加载的纹理传给shader程序里呢? 这就要用到纹理单元. glBindTexture(GL_TEXTURE_2D, texture1); 这条代码将纹理texture1传递给了正在使用的着色器程序里的uniform sampler2D texture1 中间隐含过程是,opengl有许多默认的纹理单元…
纹理坐标配置函数,先看定义: void glTexCoord2f (GLfloat s, GLfloat t); 1.glTexCoord2f()函数 有两个参数:GLfloat s, GLfloat t 第一个参数代表X坐标. 0.0f 是纹理的左侧. 0.5f 是纹理的中点, 1.0f 是纹理的右侧. 第二个参数代表Y坐标. 0.0f 是纹理的底部. 0.5f 是纹理的中点, 1.0f 是纹理的顶部. 一个完全纹理的四个顶点的坐标分别是(0.0f, 0.0f).(0.0f, 1.0f).(1…