基于OpenGL的新式OBJ文件纹理贴图方法研究
opengl帧缓冲 纹理 原理
opengl帧缓冲纹理原理
OpenGL帧缓冲对象(Framebuffer Object,FBO)是一种用于渲染到纹理的技术,它允许我们在不直接将渲染结果显示到屏幕上的情况下进行渲染。
这种技术对于实现后期处理效果(Post-processing effects)和渲染到纹理(Rendering to texture)非常有用。
首先,让我们了解一下OpenGL纹理的基本原理。
纹理是一种二维图像,它可以被应用到几何图元上以呈现出更加生动的外观。
在OpenGL中,纹理可以被绑定到帧缓冲对象上,使得我们可以在渲染过程中将结果直接渲染到纹理上,而不是直接渲染到屏幕上。
帧缓冲对象是一个可以包含渲染结果的容器,它可以包含颜色缓冲、深度缓冲和模板缓冲。
在使用帧缓冲对象时,我们可以将渲染的结果存储到一个或多个附加的纹理或渲染缓冲中,而不是直接输出到屏幕上。
这使得我们可以在渲染过程中对渲染结果进行进一步处理,或者将其用作输入来创建复杂的效果。
在使用帧缓冲对象时,我们需要执行以下步骤:
1. 创建帧缓冲对象并绑定它。
2. 创建一个或多个纹理附件或渲染缓冲附件,并将它们附加到帧缓冲对象上。
3. 执行渲染操作,将结果渲染到帧缓冲对象的附件上。
4. 如果需要,可以将帧缓冲对象的附件纹理用作输入进行后期处理。
在OpenGL中,帧缓冲对象和纹理的使用可以实现各种复杂的渲染技术,例如抗锯齿、阴影映射、后期处理效果等。
通过将渲染结果存储到纹理中,我们可以在渲染过程中对结果进行多次处理,从而实现更加生动和复杂的视觉效果。
帧缓冲对象和纹理的结合使用为OpenGL渲染提供了更大的灵活性和功能性。
[OpenGL]纹理贴图实现总结
[OpenGL]纹理贴图实现总结实现步骤第⼀步:设置所需要的OpenGL环境设置上下⽂环境删除已经存在的渲染的缓存设置颜⾊缓存设置帧缓存清除缓存设置窗⼝⼤⼩开启功能编译shander使⽤program获取shader中的属性和uniform索引第⼆步:绘制图⽚获取图⽚数据并且的到对应的纹理id指定纹理,绑定纹理开始对图形进⾏渲染(启⽤顶点属性数组纹理坐标,将纹理坐标传递到shader中启⽤顶点属性数组顶点坐标,将顶点坐标传递到shader中启⽤索引数组开始绘制)解绑纹理实现这次实现的过程有些艰难啊,⾛了很多的弯路,不过也因此学到蛮多的,⾃⼰写的怎么都运⾏不了,但是在别⼈的基础上运⾏就不⾏,其中错误的地⽅有:1.纹理的数据错误,使⽤png的库失败;2.绘制函数的参数错误;3.使⽤新版本的glsl语⾔版本,但是xcode并不⽀持,并不熟悉期间的语⾔版本迭代;实现代码:主程序#include "SOIL.h"static void error_callback(int error, const char* description){fprintf(stderr, "Error: %s\n", description);}int main(void){GLFWwindow* window;glfwSetErrorCallback(error_callback);if (!glfwInit())exit(EXIT_FAILURE);window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);if (!window){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();exit(EXIT_FAILURE);}glfwMakeContextCurrent(window);glewExperimental = GL_TRUE;glewInit();glfwSwapInterval(1);glViewport(0, 0, 640, 480);bool ret = getImageData("/Users/staff/Desktop/Moni/Moni/wall.png");if (!ret) {cout << "get iamge data is failed." << endl;}else {cout << "get iamge data is success." << endl;//测试图⽚数据// FILE * file;// file = fopen("/Users/staff/Desktop/abc.png","wb");// if (file)// {// fwrite(_sp_image_data.getBytes(),1,_sp_image_data.getSize(), file);// }// fclose(file);}// 第⼀⾏和第三⾏不是严格必须的,默认使⽤GL_TEXTURE0作为当前激活的纹理单元/*** GL_TEXTURE_2D表⽰操作2D纹理* 创建纹理对象,* 绑定纹理对象,*/glPixelStorei(GL_UNPACK_ALIGNMENT, 8);glGenTextures(1, &_sp_textureID);glBindTexture(GL_TEXTURE_2D, _sp_textureID);glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );// glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );// glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );/*** 将图像数据传递给到GL_TEXTURE_2D中, 因其于textureID纹理对象已经绑定,所以即传递给了textureID纹理对象中。
基于OpenGL的图像渲染算法研究
基于OpenGL的图像渲染算法研究随着科技越来越发达,图像渲染技术也越来越成熟。
而其中最为基础的技术便是OpenGL图像渲染算法。
作为一种常用于数字媒体处理和3D图形应用程序中的开源3D图形API,它通过使用设备的GPU进行图像渲染和处理,提供了一种快速、高质量的图像渲染方法。
在图像渲染中,OpenGL主要采用三种渲染方式:顶点着色VBO(Vertex Buffer Object)方式、像素着色FBO(Frame Buffer Object)方式和延迟着色(Deferred Shading)方式。
顶点着色VBO方式和像素着色FBO方式都是通过OpenGL设置整个渲染管线来实现的。
而在这两种方式中,VBO方式主要对基本几何元素(如点、线、面等)进行渲染,而FBO方式则是直接针对像素进行渲染。
在不同的情况下,我们可以根据需要选择相应的方式来实现图像的渲染。
与之相比,延迟着色(Deferred Shading)方式则更为灵活且适用范围更广。
其主要思想是使处理过程分为两步,即进行几何处理之后再进行光照计算。
这样的好处是可以节省大量的计算资源,并且在某些情况下提高图像的渲染效果。
在实际运用中,OpenGL图像渲染算法还可以通过各种各样的技术进一步提高其渲染性能和效果。
其中,最为核心的技术便是纹理贴图技术。
纹理贴图技术是指在图像渲染过程中,通过给定一张纹理图像将其贴到我们需要绘制的几何体物体的表面上。
这样可以实现物体表面的各种各样的细节效果,如“木纹”、“石纹”、“金属感”等。
除了纹理贴图技术,OpenGL图像渲染算法还可以使用多重采样、亚像素渲染、各向异性过滤等技术进一步提升图像的渲染效果和性能。
值得一提的是,OpenGL图像渲染算法已经被广泛应用于各种数字媒体处理的领域。
如游戏开发、电影制作、虚拟现实、建筑设计等方方面面。
通过学习和应用OpenGL图像渲染算法,我们可以为各种数字媒体处理的领域带来更高效、更高质量的图像渲染技术。
计算机图形学中的纹理贴图技术研究
计算机图形学中的纹理贴图技术研究计算机图形学是一门综合性的学科,涉及到计算机视觉、计算机图形处理、计算机动画等多个领域。
其中,图形处理是计算机图形学的一个重要方向,其目的是将人类的感知世界转化为计算机可处理的数字图像。
在图形处理中,纹理贴图技术是一项应用广泛的技术,可以在不增加几何复杂度的情况下为图形增加细节和真实感。
纹理贴图技术是将一张或多张纹理图像映射到三维物体的表面上,使物体表面呈现出现实世界中的质感和结构。
纹理贴图技术的实现主要涉及到三个步骤:纹理映射、纹理过滤和纹理合成。
纹理映射是指将纹理图像映射到三维物体表面上。
在计算机图形学中,通常使用UV坐标系表示纹理图像的二维坐标,将UV坐标系映射到三维物体表面上。
在进行纹理映射时,需要考虑三维物体表面的形状和大小,以及纹理图像的分辨率和尺寸等因素。
纹理过滤是指在进行纹理映射时,根据三维物体表面的变化来对纹理图像进行处理,以增加纹理图像的真实感和细节。
纹理过滤主要分为点过滤和线性过滤两种方式。
点过滤是最简单的过滤方式,它是以最近邻点的像素颜色作为目标像素的像素颜色。
当物体上的像素点和纹理图像上的像素点坐标不完全对应时,会出现锯齿状的效果,从而影响纹理的真实感。
线性过滤是根据像素颜色之间的平均值进行计算的过滤方式。
它可以提供更多的细节和真实感,但同时也会增加计算复杂度。
纹理合成是将多个纹理图像合并成一个纹理图像的过程。
纹理合成可以通过将多个纹理图像叠加在一起或者使用混合技术来完成。
在进行纹理合成时,需要考虑各个纹理图像之间的分辨率、尺寸和透明度等因素。
纹理贴图技术的应用非常广泛,除了在计算机游戏和动画制作中,纹理贴图技术还被广泛用于虚拟现实、医学图像、机器人视觉等领域。
在医学图像领域中,纹理贴图技术可以用于对不同类型的组织进行分类和分割,提高医学诊断的准确性。
在机器人视觉领域中,纹理贴图技术可以用于对机器人周围环境进行建模和识别,提高机器人的自主导航和操作能力。
OpenGL纹理贴图
1.6纹理贴图在三维图形中,纹理映射(Texture Mapping)的方法运用得很广,尤其描述具有真实感的物体。
比如绘制一面砖墙,就可以用一幅真实的砖墙图像或照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。
如果不用纹理映射的方法,则墙上的每一块砖都必须作为一个独立的多边形来画。
另外,纹理映射能够保证在变换多边形时,多边形上的纹理图案也随之变化。
例如,以透视投影方式观察墙面时,离视点远的砖块的尺寸就会缩小,而离视点较近的就会大些。
此外,纹理映射也常常运用在其他一些领域,如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或用大理石、木材、布匹等自然物质的图像作为纹理映射到多边形上表示相应的物体。
纹理映射有许多种情况。
例如,任意一块纹理可以映射到平面或曲面上,且对光亮的物体进行纹理映射,其表面可以映射出周围环境的景象;纹理还可按不同的方式映射到曲面上,一是可以直接画上去(或称移画印花法),二是可以调整曲面颜色或把纹理颜色与曲面颜色混合;纹理不仅可以是二维的,也可以是一维或其它维的。
我们这里重点研究二维纹理贴在三维物体表面上的方法。
2D纹理就是一张平面图片,它是由平面上的像素点(称纹素Texel)组成,因此每个点的在纹理内部只有二位的相对坐标(贴在物体上后就有三维的实际坐标了)。
●定义1、修改TITLE#define TITLE "5DG'S 2D Texture Mapping!" // 定义窗口标题2、定义常量#define MAXTEXTURE 2 // 定义最大的纹理数目(new) 定义需要开辟的纹理空间为2,每个空间存储一个二维纹理。
3、定义全局变量GLfloat angle; // 控制物体的旋转角度GLuint texture[MAXTEXTURE]; // 纹理数组,保存纹理名称angle用来控制坐标系的旋转角度。
texture[MAXTEXTURE]为纹理数组,保存MAXTEXTURE个纹理的名称。
opengl 纹理原理
opengl 纹理原理OpenGL纹理原理一、引言OpenGL是一种用于实时渲染的图形库,它提供了丰富的功能和工具,使开发者能够高效地创建图形和图像效果。
其中,纹理是OpenGL中非常重要的一个概念,它可以为物体表面添加图案、颜色和细节,使得图形更加逼真和生动。
本文将介绍OpenGL纹理的原理和基本应用。
二、纹理的概念纹理是一种用于模拟物体表面细节的技术。
在OpenGL中,纹理是由一个或多个图像组成的二维数组,其中每个像素都对应着物体表面的一个点。
这些图像可以是由照相机拍摄的真实图像,也可以是由计算机生成的虚拟图像。
三、纹理的映射在将纹理应用到物体表面之前,需要进行纹理坐标的映射。
纹理坐标是一个二维向量,它定义了纹理上的一个点与物体表面上的一个点的对应关系。
常用的纹理坐标系统有UV坐标系统和球坐标系统。
四、纹理的过滤在纹理坐标映射完成后,需要进行纹理的过滤操作。
纹理过滤是为了解决纹理在不同距离和角度下的显示问题。
常用的纹理过滤方式有最近邻过滤和线性过滤。
最近邻过滤是选择距离纹理坐标最近的像素进行采样,适用于图像像素较大的情况;线性过滤是通过对距离纹理坐标最近的四个像素进行加权平均来进行采样,适用于图像像素较小的情况。
五、纹理的环绕方式纹理的环绕方式定义了在纹理坐标超出范围时如何获取纹理颜色值。
常用的环绕方式有重复、镜像重复和边缘拉伸。
重复方式是在超出范围后将纹理坐标的整数部分进行取余数运算,从而使纹理重复出现;镜像重复方式是在超出范围后将纹理坐标的整数部分进行取余数运算,并根据奇偶性决定是保留取余数还是取余数的补数,从而使纹理呈现镜像效果;边缘拉伸方式是将超出范围的纹理坐标的值设置为边缘纹理坐标的值,从而使纹理在超出范围后呈现边缘颜色。
六、纹理的加载在OpenGL中,纹理的加载通常分为两个步骤:图像加载和纹理创建。
图像加载是将图像数据加载到内存中,常见的图像格式有BMP、PNG和JPEG等;纹理创建是将图像数据绑定到OpenGL中的纹理对象上,并设置纹理的过滤、环绕等属性。
基于OpenGL的纹理贴图技术
基于OpenGL的纹理贴图技术作者:杨键张敏来源:《软件导刊》2011年第03期摘要:纹理贴图是增强3D场景真实感的技术基础,主要介绍了基于OpenGL的纹理贴图技术,包含实现OpenGL纹理贴图的基本步骤,以及纹理贴图各环节的技术要点,对OpenGL Mip贴图的原理和实现方法也进行了简要的介绍。
关键词:纹理贴图;3D;真实感;OpenGL;Mip贴图中图分类号:TP391.4 文献标识码:A 文章编号:1672-7800(2011)03-0169-作者简介:杨键(1981-),男,四川成都人,硕士,四川大学锦城学院助教,研究方向为图形图像处理;张敏(1983-),男,四川成都人,硕士,西南民族大学助教,研究方向为嵌入式系统。
0 引言OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数,能够利用OpenGL函数库实现各种三维物体的绘制,为实现三维物体的真实模拟必须引入纹理贴图技术,以便增强三维场景绘制的真实感,并能提高三维场景的渲染速度。
本文将着重介绍以C语言和OpenGL相结合以实现三维物体的纹理贴图过程,讲述OpenGL纹理贴图的基本步骤以及相关技术要点。
1 纹理贴图1.1 载入纹理将纹理贴图应用到几何图形的第一个必要步骤就是将纹理载入到内存之中。
已经载入之后,这个纹理就成为当前的纹理状态的一部分。
载入纹理的函数有3种,分别对应于一维、二维和三维纹理,如下:(1)一维纹理定义函数。
void glTexImage1D(GLenum target,GLint level,GLint components,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid *pixels);(2)二维纹理定义函数。
void glTexImage2D(GLenum target,GLint level,GLint components,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,constGLvoid *pixels);(3)三维纹理定义函数。
OpenGL——纹理贴图技术
OpenGL——纹理贴图技术3.2 纹理缠绕前面提到,纹理坐标应位于0-1之间。
那么当纹理坐标大于这个值会出现什么情况呢?我们可以对OpenGL进行设置,以决定当纹理坐标不位于这一区间时应采取的操作。
我们可以指定两种操作:GL_CLAMP和GL_REPEA T。
对于GL_CLAMP,超出纹理坐标的区域会使用纹理图像的边界颜色来代替,如图6.4-2所示。
图6.4-2 GL_CLAMP 的工作方式而GL_REPEA T方式则是对纹理坐标进行重置而得到重复的图像。
观察图6.4-3,你就能很容易地发现这一点。
图6.4-3 GL_REPEA T 的工作方式可以调用glTexParameter设置缠绕方式:glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,WrapMode);//在s方向上的缠绕方式glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,WrapMode);//在t方向上的缠绕方式其中,WrapMode可取GL_CLAMP或者GL_REPEA T。
4.纹理对象创建和使用文理对象在OpenGL中,我们使用glGenTextures创建纹理对象:glGenTextures(Count:Integer;TexObjs:Pointer);其中,Count是我们要创建的纹理数目,当我们只想创建一个纹理时,只需调用var Texture:GLUint;...glGenTextures(1,@Texture);这样,Texture变量中就存储了我们创建的纹理的ID号。
创建之后,我们使用glBindTexture将创建的纹理绑定到当前纹理。
这样所有的纹理函数都将针对当前纹理。
glBindTexture(Texture:GLUint);这样,我们就可以调用glTexParameter、glTexImage2D等函数来设置这个纹理对象了。
opengl算法学习---纹理映射
opengl算法学习---纹理映射纹理映射纹理映射(Texture Mapping),⼜称纹理贴图,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。
简单来说,就是把⼀幅图像贴到三维物体的表⾯上来增强真实感,可以和光照计算、图像混合等技术结合起来形成许多⾮常漂亮的效果。
纹理纹理可看成是⼀个或多个变量的函数,因此根据纹理定义域的不同,纹理可分为⼀维纹理、⼆维纹理、三维纹理和⾼维纹理。
基于纹理的表现形式,纹理⼜可分为颜⾊纹理、⼏何纹理两⼤类。
颜⾊纹理指的是呈现在物体表⾯上的各种花纹、图案和⽂字等,即通过颜⾊⾊彩或明暗度的变化体现出来的细节。
如⼤理⽯墙⾯、墙上贴的字画器⽫上的图案等。
⼏何纹理(也可称为凹凸纹理)是指基于景物表⾯微观⼏何形状的表⾯纹理,如桔⼦、树⼲、岩⽯、⼭脉等表⾯呈现的凸凹不平的纹理细节。
⽣成颜⾊纹理的⼀般⽅法是在⼀个平⾯区域(即纹理空间)上预先定义纹理图案,然后建⽴物体表⾯的点与纹理空间的点之间的对应—即映射。
以纹理空间的对应点的值乘以亮度值,就可把纹理图案附到物体表⾯上⽤类似的⽅法给物体表⾯产⽣凹凸不平的外观或称凹凸纹理。
普通纹理映射常见的2D纹理映射实际上是从纹理平⾯到三维物体表⾯的⼀个映射。
凹凸纹理映射前述各种纹理映射技术只能在光滑表⾯上描述各种事先定义的花纹图案,但不能表现由于表⾯的微观⼏何形状凹凸不平⽽呈现出来的粗糙质感,如布纹,植物和⽔果的表⽪等1978年Blinn提出了⼀种⽆需修改表⾯⼏何模型,即能模拟表⾯凹凸不平效果的有效⽅法⼀⼏何(凹凸)纹理映射(bump mapping)技术⼀个好的扰动⽅法应使得扰动后的法向量与表⾯的⼏何变换⽆关,不论表⾯如何运动或观察者从哪⼀⽅向观察表⾯,扰动后的表⾯法向量保持不变。
Blinn表⾯法⽮扰动法在表⾯任⼀点处沿其法向附加⼀微⼩增量,从⽽⽣成⼀张新的表⾯,计算新⽣成表⾯的法⽮量以取代原表⾯上相应点的法⽮量。
透明效果与混合光学原理:透射,折射,反射颜⾊调和法设a为透明体的不透明度,0≤a≤1,则I=αI a+(1−α)I ba=1,完全不透明a=0,完全透明alpha融合技术BlendingRGBA(a)不透明度a表⽰穿透该表⾯光线的数量a=1,完全不透明;a=0,完全透明gl.blendFunc(src_ factor,dst factor)混合后颜⾊=源颜⾊src_factor+⽬标颜⾊dst_factor源颜⾊:当前对象⽬标颜⾊:帧缓存像素透明与Z-Buffer消隐当对象A是透明的,即B透过A是部分可见时先画B再画A,可以处理先画A再画B,深度缓冲会从B取⼀个像素,同时注意到⼰经绘制了⼀个更近的像素(A),然后它的选择是不绘制BZ-Buffer消隐不能很好处理透明的物体,需要修正才⾏开启深度测试gl.enable(gl.DEPTH_TEST);绘制所有不透明物体(a=1.0)锁定深度缓冲区gl.depthMask(false);按从后向前次序绘制所有半透明物体释放深度缓冲区gl.depthMask(true);光线跟踪光线跟踪算法[WH1T80]是⽣成⾼度真实感图形的主要算法之⼀。
OBJ模型文件在OpenGL中的导入与处理
OBJ模型文件在OpenGL中的导入与处理
鲁志伟
【期刊名称】《科技信息》
【年(卷),期】2013(000)007
【摘要】在对OBJ模型的文件格式和OpenGL研究的基础上,提出了一种将OBJ 模型文件的模型数据进行分离、提取并导入到OpenGL中,然后运用OpenGL的强大功能实现三维模型的显示和交互操作的方法.该方法可以将三维建模软件产生的OBJ模型导入OpenGL中,降低OpenGL建模的难度.
【总页数】3页(P94-95,124)
【作者】鲁志伟
【作者单位】青岛大学信息工程学院,山东青岛266071
【正文语种】中文
【相关文献】
1.3DS与OBJ格式的三维模型文件在OpenGL中的输入与处理 [J], 汪永刚
2.基于 OpenGL 的新式 OBJ 文件纹理贴图方法研究 [J], 王波;孙蔚
3.obj模型在OpenGL中的加载与控制 [J], 李康;陈宪冬
4.三维模型文件中的OBJ格式在OpenGL中的输入与处理 [J], 王金峰; 姚国清
5.基于OpenGL的三维OBJ模型可视化研究与实现 [J], 李倩
因版权原因,仅展示原文概要,查看原文内容请购买。
基于OpenGL标准库的复合纹理贴图方法
中 图法 分类号 :P9. T 31 9
文 献标 识码 : A
文章编 号 :0072 (06 0.55 4 10. 420)810. 0 0
Co o n e x u ema p n a e n o e GL sa d r b a y mp u d dt tr p i gb s d o p n tn a d l r r e i
基于 O eG pn L标准库的复合纹理贴 图方法
卢曼莎
( 长沙理工大学 计算机学院 ,湖南 长沙 407) 106
摘 要: 当前 , 多数 三 维图形设 计软 件都 具有 纹理映射 功 能 , 但对 多幅纹理 的复合 贴 图功能 支持 不够 , 能很 好地 满足 用户 不 的需要 。 在保 证可移 植性 , 即不使 用 O e G pn L多重 纹理 扩展 的前提 下 , 出基 于 O eG 提 p n L标 准库 的复合 纹理 贴图 方法 , 户能 用 够用本 方法 实现 两幅 纹理按 照二值 掩膜 图进行 纹理 复合 , 生成新 纹理 , 并可 方便 地使 用参数 设 置来控 制纹 理效 果
绝大 多数 的 自然纹 理合成都取 得 了很好 的效 果,但这是 一种 单样本 的纹理合成 算法,无 法处理双 样本纹理 的合成 。在 国 内,纹理 合成和分 析领域起 步虽然 比较 晚 ,但 发展速度 非常 快。 徐晓刚和鲍虎军提 出 了一种约 束的多样 图纹 理合成方法 , 该方法把单 向双样 图纹理合 成技术和双 向扫描技术结合 并加 以推广 , 获得 了双 向多样 图纹理合 成结果 , 有效地提 高和改善 合成结果质量 , 同时, 引进 约束 的概念来 实现对双 向多样图合 成纹 理位 置进行控 制 。 约束 是采用增 加 目标 图的方法 来实现 的( 如图 1 所示) 。 汤颖等提 出 了基 于用户交 互控制 的纹理合 成方法 , 由用户 交互设定一些 矢量 的方 向和尺度 , 再通 过R F B 插值算法 来生成整 体光滑 的矢 量场 。这种方 法更加方 便地控 制纹理 的合成方 向和尺度 。 】
OpenGL纹理贴图
1.6纹理贴图在三维图形中,纹理映射(Texture Mapping)的方法运用得很广,尤其描述具有真实感的物体。
比如绘制一面砖墙,就可以用一幅真实的砖墙图像或照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。
如果不用纹理映射的方法,则墙上的每一块砖都必须作为一个独立的多边形来画。
另外,纹理映射能够保证在变换多边形时,多边形上的纹理图案也随之变化。
例如,以透视投影方式观察墙面时,离视点远的砖块的尺寸就会缩小,而离视点较近的就会大些。
此外,纹理映射也常常运用在其他一些领域,如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或用大理石、木材、布匹等自然物质的图像作为纹理映射到多边形上表示相应的物体。
纹理映射有许多种情况。
例如,任意一块纹理可以映射到平面或曲面上,且对光亮的物体进行纹理映射,其表面可以映射出周围环境的景象;纹理还可按不同的方式映射到曲面上,一是可以直接画上去(或称移画印花法),二是可以调整曲面颜色或把纹理颜色与曲面颜色混合;纹理不仅可以是二维的,也可以是一维或其它维的。
我们这里重点研究二维纹理贴在三维物体表面上的方法。
2D纹理就是一张平面图片,它是由平面上的像素点(称纹素Texel)组成,因此每个点的在纹理内部只有二位的相对坐标(贴在物体上后就有三维的实际坐标了)。
定义1、修改TITLE#define TITLE "5DG'S 2D Texture Mapping!" // 定义窗口标题2、定义常量#define MAXTEXTURE 2 // 定义最大的纹理数目(new) 定义需要开辟的纹理空间为2,每个空间存储一个二维纹理。
3、定义全局变量GLfloat angle; // 控制物体的旋转角度GLuint texture[MAXTEXTURE]; // 纹理数组,保存纹理名称angle用来控制坐标系的旋转角度。
texture[MAXTEXTURE]为纹理数组,保存MAXTEXTURE个纹理的名称。
OpenGL完全教程 第六章 纹理贴图
OpenGL完全教程 第六章 纹理贴图作者:何咏 日期:2006-2-3 20:56:39 点击:4719如需转载本文,请声明作者及出处。
第六章 纹理贴图截至目前为止,我们已经能够绘制各种3D物体,并为它们增加光照效果,使它们更具有立体感。
但是,在实际运用中,我们不仅仅需要简单地绘制一个物体的轮廓,我们需要绘制蓝天白云、真实的墙壁和物体、人物和树木。
要达到这一目的,简单的将模型的轮廓绘制出来时远远不够的。
我们需要使用纹理贴图来再现真实的细节。
在计算机硬件高速发展的今天,即使是最低端的显卡也能很快地处理大量的纹理,满足我们的需求。
这些条件可以让我们毫无顾虑的使用OpenGL的纹理贴图功能,绘制出形形色色的物体。
本章将是学习OpenGL的最后一个基础章节。
本章之后,我们将开始接触一些OpenGL的高级专题学习本章内容,你将了解:•什么是纹理贴图•如何创建纹理图像•OpenGL中贴图的方式•使用纹理对象来管理的纹理•将纹理运用到图元上•自动生成纹理坐标•多贴图纹理6.0 准备工作由于Delphi为我们所提供的OpenGL头文件是OpenGL1.0版本的,因此里面缺少一些函数的声明,这导致我们不能使用直接调用这些函数。
因此我们要手动为OpenGL库添加下面的代码一进行补完:procedure glBindTexture(target: GLEnum; texture: GLuint); stdcall; external opengl32;procedure glDeleteTextures(n: GLsizei; textures: PGLuint); stdcall; external opengl32;procedure glGenTextures(n: GLsizei; textures: PGLuint); stdcall; external opengl32;function glIsTexture(texture: GLuint): GLboolean; stdcall; external opengl32;procedure glPolygonOffset(factor, units: GLfloat); stdcall; external opengl32;function gluBuild2DMipmaps(target: GLEnum; components, width, height: GLint; format, atype: GLEnum;Data: Pointer): GLint; stdcall; external GLU32;6.1 什么是纹理贴图纹理贴图,从本质上讲,是一个位图图像。
opengl学习笔记(四):openCV读入图片,openGL实现纹理贴图
opengl学习笔记(四):openCV读⼊图⽚,openGL实现纹理贴图在opengl中实现三维物体的纹理贴图的第⼀步就是要读⼊图⽚,然后指定该图⽚为纹理图⽚。
⾸先利⽤opencv的cvLoadImage函数把图像读⼊到内存中img = cvLoadImage("../shanghai.bmp", 1); //读⼊彩⾊图然后利⽤下⾯代码在内存中开辟⼀个跟读⼊图⽚⼤⼩相同的内存空间:#include <iostream>#include <GL/gl.h>#include <GL/glu.h>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;/*Mat img = imread("../shanghai.bmp");int width = img.cols;int height = img.cols;GLubyte* pixels;GLuint load_texture(cv::Mat& image){int width = image.cols;int height = image.cols;//OpenGL纹理⽤整型数表⽰GLuint texture_ID;//获取图像指针int pixellength = width*height*3;pixels = new GLubyte[pixellength];memcpy(pixels, image.data, pixellength * sizeof(unsigned char));//将texture_ID设置为2D纹理信息glGenTextures(1, &texture_ID);glBindTexture(GL_TEXTURE_2D, texture_ID);//纹理放⼤缩⼩使⽤线性插值glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels);free(pixels);return texture_ID;}void draw(){glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);drawCameraFrame();glFlush();}void drawCameraFrame(){GLuint image = load_texture();if (!m_isTextureInitialized){glGenTextures(1, &m_backgroundTextureId);glBindTexture(GL_TEXTURE_2D, m_backgroundTextureId);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);m_isTextureInitialized = true;}int w = m_backgroundTextureId.cols;int h = m_backgroundTextureId.rows;glPixelStorei(GL_PACK_ALIGNMENT, 1);glBindTexture(GL_TEXTURE_2D, m_backgroundTextureId);if (m_backgroundImage.channels() == 3)glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, m_backgroundImage.data); else if(m_backgroundImage.channels() == 4)glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, m_backgroundImage.data); else if (m_backgroundImage.channels()==1)glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, m_backgroundImage.data); const GLfloat bgTextureVertices[] = { 0, 0, w, 0, 0, h, w, h };const GLfloat bgTextureCoords[] = { 1, 0, 1, 1, 0, 0, 0, 1 };const GLfloat proj[] = { 0, -2.f/w, 0, 0, -2.f/h, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1 };glMatrixMode(GL_PROJECTION);glLoadMatrixf(proj);glMatrixMode(GL_MODEVIEW);glLoadIdentity();glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D, m_backgroundTextureId);glEnableClientState(GL_VERTEX_ARRAY);glEnableClientState(GL_TEXTURE_COORD_ARRAY);glVertexPointer(2, GL_FLOAT, 0, bgTextureVertices);glTexCoordPointer(2, GL_FLOAT, 0, bgTextureCoords);glColor4f(1,1,1,1);glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glDisableClientState(GL_VERTEX_ARRAY);glDisableClientState(GL_TEXTURE_COORD_ARRAY);glDisable(GL_TEXTURE_2D);}void processVideo(){cv::Mat currentFrame;capture >> currentFrame;// Check the capture succeeded:if (currentFrame.empty()){std::cout << "Cannot open video capture device" << std::endl;return;}cv::Size frameSize(currentFrame.cols, currentFrame.rows);}bool processFrame(const cv::Mat& cameraFrame){// Clone image used for background (we will draw overlay on it)cv::Mat img = cameraFrame.clone();// Set a new camera frame:drawingCtx.updateBackground(img);// Request redraw of the window:drawingCtx.updateWindow();}int main( int argc, char** argv){cv::VideoCapture capture = cv::VideoCapture(1);cv::namedWindow(windowName, cv::WINDOW_OPENGL);cv::resizeWindow(windowName, frameSize.width, frameSize.height);cv::setOpenGlContext(windowName);cv::setOpenGlDrawCallback(windowName, draw, NULL);cv::updateWindow(windowName);}*/Mat m_backgroundImage = imread("../shanghai.bmp");GLuint m_backgroundTextureId;void drawCameraFrame(){glGenTextures(1, &m_backgroundTextureId);glBindTexture(GL_TEXTURE_2D, m_backgroundTextureId);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);int w = m_backgroundImage.cols;int h = m_backgroundImage.rows;glPixelStorei(GL_PACK_ALIGNMENT, 1);glBindTexture(GL_TEXTURE_2D, m_backgroundTextureId);// Upload new texture data:glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, m_backgroundImage.data);//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, m_backgroundImage.data); //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, m_backgroundImage.data); const GLfloat bgTextureVertices[] = { 0, 0, w, 0, 0, h, w, h };const GLfloat bgTextureCoords[] = { 1, 0, 1, 1, 0, 0, 0, 1 };const GLfloat proj[] = { 0, -2.f/w, 0, 0, -2.f/h, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1 };glMatrixMode(GL_PROJECTION);glLoadMatrixf(proj);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D, m_backgroundTextureId);// Update attribute values.glEnableClientState(GL_VERTEX_ARRAY);glEnableClientState(GL_TEXTURE_COORD_ARRAY);glVertexPointer(2, GL_FLOAT, 0, bgTextureVertices);glTexCoordPointer(2, GL_FLOAT, 0, bgTextureCoords);glColor4f(1,1,1,1);glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glDisableClientState(GL_VERTEX_ARRAY);glDisableClientState(GL_TEXTURE_COORD_ARRAY);glDisable(GL_TEXTURE_2D);}void draw(void* param){glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);drawCameraFrame();glFlush();}int main ( int argc, char** argv ){cv::namedWindow("windowName", cv::WINDOW_OPENGL);cv::resizeWindow("windowName", m_backgroundImage.cols, m_backgroundImage.rows);cv::setOpenGlContext("windowName");cv::setOpenGlDrawCallback("windowName", draw, NULL);updateWindow("windowName");waitKey(0);return0;}/*#include <GL/glut.h>#include <GL/gl.h>#include <opencv2/cv.h>#include <opencv2/highgui/highgui.hpp>GLuint texture; //纹理图IplImage *img;unsigned char* textureImage;void makeTextureImg(IplImage *image){int width = image->width;int height = image->height;CvScalar s;//读⼊彩⾊图textureImage = new unsigned char[width * height * 3];for (int i = 0; i < height; i++ )for (int j = 0; j < width; j++){s = cvGet2D(image, i, j);textureImage[i * 3 * width + 3 * j] = s.val[0];textureImage[i * 3 * width + 3 * j + 1] = s.val[1];textureImage[i * 3 * width + 3 * j + 2] = s.val[2];}}int loadTexture(IplImage* image, GLuint* text){if (image==NULL) return -1;glGenTextures(1, text);glBindTexture(GL_TEXTURE_2D, *text);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glPixelStorei(GL_UNPACK_ALIGNMENT, 1);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height, 0, GL_RGB, GL_UNSIGNED_BYTE, image->data); return 0;}void display(){glClearColor (0.0,0.0,0.0,1.0);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);}int main(int argc, char** argv){glutInit (&argc, argv);glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE);glutInitWindowSize (500, 500);}*/程序运⾏结果如下:参考博客:https:///learn_sunzhuli/article/details/46642379/s/blog_8d8425f30100yoi4.htmlhttps:///u013898698/article/details/77164775https:///wan_exe/article/details/70943020代码下载:。
基于OpenGL的纹理贴图技术
基于OpenGL的纹理贴图技术
杨键;张敏
【期刊名称】《人天科学研究》
【年(卷),期】2011(000)003
【摘要】纹理贴图是增强3D场景真实感的技术基础,主要介绍了基于OpenGL的纹理贴图技术,包含实现OpenGL纹理贴图的基本步骤,以及纹理贴图各环节的技术要点,对OpenGL Mip贴图的原理和实现方法也进行了简要的介绍。
【总页数】3页(P169-171)
【作者】杨键;张敏
【作者单位】四川大学锦城学院,四川成都610072;西南民族大学,四川成都610031
【正文语种】中文
【中图分类】TP391.4
【相关文献】
1.基于OpenGL的三维物体纹理贴图研究 [J], 初苗;田少辉
2.基于MFC的OpenGL纹理贴图技术 [J], 刁伟忠;常发亮;孙晓燕
3.基于 OpenGL 的新式 OBJ 文件纹理贴图方法研究 [J], 王波;孙蔚
4.基于OpenGL的纹理贴图技术 [J], 杨键;张敏
5.基于OpenGL的三维纹理贴图绘制技术研究与实现 [J], 兰一麟涛;钱伟;田明银因版权原因,仅展示原文概要,查看原文内容请购买。
基于OpenGL的纹理贴图技术
纹 理 对 象 是 用 来 存 储 纹 理 数 据 的 , 备 随 时 使 用 。 创 以
GIi t b r e GIe u n o d r, n m f r a , Le u y e o s I一 om t G n m t p ,c n t G v i od p x l ): i es
建 了纹 理 对 象 , 能 够 将 多 个 纹 理 一 次 性 载 人 内存 , 便 就 以
场 景 绘 制 期 间 随 时 引 用 其 中 的任 何 一 个 纹 理 。
1 2 1 纹 理 名 字 的 生 成 . .
维纹理 , 下 : 如
F r t t p 参 数 描 述 了 纹 理 图像 数 据 的格 式 和数 oma 和 y e
据类 型。
1 2 纹 理 对 象 .
( ) 维 纹 理 定 义 函 数 。 v i l xma e D ( 1 一 od gTe l g l GLe —
nu t r t GLi e e , m a ge , ntl v l GLi t c m p n n s GLsz i d h, n o o et, ie wi t
Wit 、 eg t d p h参 数 指 定 了 被 载 入 纹 理 的 宽 dh h ih 和 e t
度 、 度 和 深 度 。 这 些 值 必 须 是 2的 整 数 次 方 。 高
Bod r 数 允 许 为纹 理 贴 图 指 定 一 个 边 界 宽 度 。 re参
载 入 纹 理 的 函数 有 3种 , 别 对 应 于 一 维 、 维 和 三 分 二
G Ls z ih i h , i e e g t GLs z ide t , n o d r GI e u f r i e p h GIi t b r e , n m o —
基于OpenGL的三维物傩纹理贴图研究
基于OpenGL的三维物傩纹理贴图研究关键字: OpenGL 纹理贴图三维物体纹理贴图是开发三维图形系统的重要一环。
本文论述了结舍c 语言与OpenGL实现三维物体纹理贴图的思路与方法。
并通过实例验证了纹理贴图技术在绘制真实感图形中的可行性。
在软件开发过程中,为了能够更好地再现三维图形,常常需要绘制逼真的景物。
现实世界中的物体表面往往有着丰富的纹理,因此,要绘制逼真的三维物体,除了对物体进行光照处理外,还需要给物体表面附加上这种纹理特征,使之看起来更真实,这就要用到“纹理贴图”技术。
文中将论述在Windows窗口系统下,用C语言和OpenGL实现三维物体的纹理贴图过程,从中可以看到纹理贴图的一般性原理与方法。
1、纹理贴图的概述纹理贴图技术又称纹理映射技术,是计算机图形学中广泛应用的一项重要技术。
传统的几何造型很难描述景物表面的微观细节,而利用纹理图像来描述景物表面各点处的反射属性,可以达到模拟景物表面丰富的纹理细节的目的,从而提高计算机生成图形的真实性。
另一方面,采用纹理映射的方法可以大大地简化建模的过程。
比如,同是一栋大楼表面。
若完全用建模的方法来构造,则需要画出大楼的每一扇门、每一扇窗户;若采用纹理映射,只需建立简单的长方体模型,用拍下的大楼外观图片贴至模型表面即可。
相比之下,工作量要小得多。
纹理贴图,从本质上讲,是—个位图图像。
在程序中,—个纹理图像就是一个一维或二维数组,存储每一个像素的颜色值(包括R、G、B、A分值,分别存储一个像素的红、绿、蓝、透明度分值)。
运用一个纹理贴图,就是把纹理图像根据纹理坐标对应到图元上。
比如,现在有一个三角形,顶点坐标分别是Vl、V2、V3,以及一幅纹理图像。
现在。
我们可以在绘制三角形之前,为顶点VI、V2、V3指定纹理坐标,使每一个顶点的坐标和它的纹理坐标一一对应,如图1所示:一旦建立起这种对应关系,就可以开启纹理贴图功能,让OPenGL根据顶点的贴图坐标渲染出指定的三角形,如图2所示:这就是纹理贴图的原理。
OpenGLES纹理详解
每个二维纹理都由许多小的纹理元素组成,类似与片元和像素,使用纹理最简单的方式就是直接从一个图像加载数据。在OpenGL中规定 纹理图像的左下角由stst坐标(0.0,0.0)指定,右上角由stst坐标(1.0,1.0)指定,不过超过1.0的坐标也是允许的,在该区间之外的纹理在读取 时的时候由纹理拉伸模式决定。
public static native void glGenTextures( int n, // 指定要生成的纹理对象的数量 int[] textures, // 保存纹理对象ID的数组 int offset
);
纹理对象在应用程序中不再使用时,需要删除。
public static native void glDeleteTextures( int n, // 指定要删除的纹理数量 int[] textures, // 保存待删除的纹理ID的数组 int offset
);
纹理对象的 ID 必须是 glGenTextures 产生的,一旦生成纹理ID,就必须绑定纹理对象才能继续进行后续的操作。后续的操作将影响绑定 的纹理对象。一旦纹理被绑定到一个特定的纹理目标,再删除之前就一直保持着绑定状态。
public static native void glBindTexture( int target, // 绑定纹理对象到目标 GL_TEXTURE_2D 或 GL_TEXTURE_CUBE_MAP int texture // 要绑定的纹理对象ID
private Context mContext; public Rectangle(Context context) {
C#下使用OpenGL(SharpGL)绘制obj模型
C#下使⽤OpenGL(SharpGL)绘制obj模型
注册5个多⽉,最近赶⼀个OpenGL在winfrom下的项⽬。
说实话,第⼀次接触3D图像处理,⼀点点摸索,感谢⽹上⽆私奉献的⽹友。
因为项⽬是给⽼师做的,⼯程源码不能公开,我只说下⼤概思路,算是起个抛砖引⽟的作⽤。
⽹上关于SharpGL资源甚少,⽽且⼤部分都在隔壁需要积分什么的才能下载,很是厌恶这点。
感谢国外NEHE的教程,感谢国内/855385/d-1⽹友的⽆私贡献。
⾸先,你需要把SharpGL.dll导⼊⼯程下的debug⽬录,这样就可以引⽤。
下⾯我以VS2010为基础上图。
右键⼯具箱空⽩处-选择项
关于处理OBJ模型
obj模型⼀般都是由v(点)vt(贴图)vn(法线)f(⾯的索引构成),所以说处理好f的数据是最关键的,我的数据结构也不太好(正在努⼒重新学习),建⽴模型挺烂的,就不上模型的源码了。
第⼀次写博客,没想到挺慢的。
宿舍要熄灯了,等改天有空再继续补上。
有什么错误请指正,感谢!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 0 1 5 年 第 8期
计 算 机 与 数 字 工 程
C o mp u t e r& Di g i t a l En g i n e e r i n g
Vo 1 . 4 3 No . 8
1 49 7
基 于 Op e n GL 的 新 式 OB J文 件 纹 理 贴 图 方 法 研 究
法 。首先依据 F l o a t e r 提 出的权重一 保形法 将三维网格降维为二维 网格 ; 然 后利用 Op e n G L对 二维 网格做简 单纹理 贴图 ; 最
后 利 用 二 维 网格 与 三维 网格 顶 点 坐标 间 同 构 关 系 , 实 现 二 维 纹 理 到 三维 网格 曲 面 的 纹 理 贴 图 。
W ANG B o S UN We i 。
( 1 .C o l l e g e o f o mp C u t e r a n d S o f t w a r e , Na n j i n g U n i v e r s i t y o f P o s t s a n d T e l e c o m mu i n c a t i o n s ,N a n j i n g 2 1 0 0 4 6 )
Ke y W or d s Op e n GL,0B J ,c o n f o r ma l d i me n s i o n r e d u c t i o n,t e x t u r e ma p p i n g
王
( 1 . 南京邮电大学计算机软件学院 南京
波 孙
蔚
南京 2 1 0 0 4 6 )
2 1 0 0 4 6 ) ( 2 . 南京邮 电大学 电子科学与工程学 院
摘
要
j维纹理贴 图指将二维纹理 图像 张贴 到三维模 型的表面上 , 从而得 到逼真 的三维图形 的过程 。然而 , 对于复
杂 三 维 模 型 的纹 理 贴 图还 没 有 找 到直 接 贴 图 的 方 法 。论 文 设 计 了 一 种 新 式 的 针 对 OB J三 维 网格 曲 面 模 型 纹 理 贴 图 的 方
i s t i c 3 D g r a p h i c s . Ho we v e r ,f o r c o mp l e x 3 D mo d e l ,t h e r e i s n o d i r e cx t u r e ma p p i n g .Th i s p a p e r d e s i g n s a n e w
关键词
( ) p e n G L;0 B J ;保形降维 ; 纹理贴 图
TP 3 0 2 . 4 D OI : 1 0 . 3 9 6 9 / j . i s s n 1 6 7 2 — 9 7 2 2 . 2 0 1 5 . 0 8 . 0 2 9
中 图分 类 号
A Ne w OBJ Fi l e Te x t ur e Ma p p i n g Me t ho d Ba s e d o n Op e nGL
c o n f o r ma l ,a 3 D me s h i s r e d u c e d t O a 2 D o n e .S e c o n d,2 D me s h i s ma p p e d t e x t u r e b y u s i n g Op e n GL s i mp l y .Fi n a l l y ,t h e r e 一 1 a t i o n o f v e r t e x c o o r d i n a t e s b e t we e n t h e 2 D a n d 3 D me s h i S u s e d t O a c h i e v e t h e t e x t u r e ma p p i n g b e t we e n t h e 2 D t e x t u r e a n d t h e 3 D g r i d s u r f a c e .
( 2 .C o l l e g e o f E l e c t r o ic n S c i e n c e a n d E n g i n e e r i n g, N i n g Un iv e r s i t y o f P o s t s nd a T e l e c o mmu n i c a t i o n s , Na n j i g 2 n 1 0 0 4 6 )
A bs t r a c t 3 D t e x t u r e ma p p i n g r e { e r s t O t h e p r o c e d u r e o f p o s t i n g 2 D t e x t u r e i ma g e t o 3 D s u r f a c e mo d e l t O o b t a i n a r e a l —
me t h o d o f t e x t u r e ma p p i n g wi t h Op e n GL f o r 3 D me s h mo d e l s o f OB J f o r ma t f i l e . Fi r s t ,Ac c o r d i n g t o t h e me t h o d we i g h t -