博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL学习二十二:纹理坐标自动生成
阅读量:4212 次
发布时间:2019-05-26

本文共 2170 字,大约阅读时间需要 7 分钟。

可以让OpenGL自动生成纹理坐标,而不是使用glTexCoord*()函数显示地分配纹理坐标

void glTexGeni (GLenum coord, GLenum pname, GLint param);

coord pname param
{GL_S,GL_T}或{GL_R,GL_Q} GL_TEXTURE_GEN_MODE GL_OBJECT_LINEAR
GL_EYE_LINEAR
GL_SPHERE_MAP
GL_NORMAL_MAP
GL_REFLECTION_MAP
GL_OBJECT_PLANE 浮点型数值
GL_EYE_PLANE 浮点型数值

GL_OBJECT_LINEAR:物体模式,纹理会跟随物体的转动而转动(左图)

GL_EYE_LINEAR:视觉模式,纹理部会跟随物体的转动而转动,始终保持原状(右图)

GL_SPHERE_MAP:环境纹理(球体贴图)具有很好的反射效果

GL_REFLECTION_MAP:环境纹理(反射纹理)可替换GL_SPHERE_MAP
GL_NORMAL_MAP:常用于立方体贴图,或者散射与反射的场景

GL_NORMAL_MAP球体贴图 GL_REFLECTION_MAP球体贴图

纹理贴图做法

1设置纹理环绕模式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
2.设置纹理生成模式
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR);
glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR);
3.启用自动生成纹理
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);

立方图纹理

立方图纹理是一种比较特殊的纹理技术,它用6幅二维图像构成一个以原点为中心的纹理立方体,对于每个片段,纹理坐标(S,T,R)被当做方向向量看待,每个纹理单元都表示从原点所看到的纹理立方体上的图像
可以调用glTexImage2D函数6次,分别使用他target参数表示立方体的各个面(+X,-X,+Y,-Y,+Z,-Z)从而创建一个立方体

glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT, 0, GL_RGBA, imageSize,imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image1);glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT, 0, GL_RGBA, imageSize,imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image4);glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT, 0, GL_RGBA, imageSize,imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image2);glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT, 0, GL_RGBA, imageSize,imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image5);glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT, 0, GL_RGBA, imageSize,imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image3);glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT, 0, GL_RGBA, imageSize,imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image6);glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT);glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT);glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT);

coord pname param
{GL_S,GL_T}或{GL_R,GL_Q} GL_TEXTURE_GEN_MODE GL_OBJECT_LINEAR
GL_EYE_LINEAR
GL_SPHERE_MAP
GL_NORMAL_MAP
GL_REFLECTION_MAP
GL_OBJECT_PLANE 浮点型数值
GL_EYE_PLANE 浮点型数值

转载地址:http://wfumi.baihongyu.com/

你可能感兴趣的文章
Android display架构分析
查看>>
S3C2440上LCD驱动 (FrameBuffer)实例开发讲解
查看>>
Linux音频编程指南
查看>>
针对windows编程-linux驱动编程-usb编程的号文章--推荐
查看>>
USB OTG的工作原理-相互切换和交互流程
查看>>
usb-otg-调试心得
查看>>
嵌入式开发指导博客-刘洪涛
查看>>
Linux启动流程-bootloader至kernel的过程--android系统启动流程
查看>>
USB2.0速度识别--区分低速-高速-全速
查看>>
NandFlash驱动超详细分析
查看>>
inf文件解析
查看>>
MOSFET结构及其工作原理详解
查看>>
android开源社区
查看>>
手机摄像头工作原理
查看>>
手机电容触摸屏技术简介
查看>>
led子系统 及 内核中led触发器实例
查看>>
Android USB Tethering的实现以及代码流程
查看>>
有关电池充电和LCD驱动的好地方
查看>>
USB规范浏览--设备和主机规范
查看>>
男人的品位--我们自己的最求
查看>>