解读OpenGL棋盘纹理贴图

  1. for (int i = 0; i < 64; i++)  
  2.     {  
  3.         for (int j = 0; j < 64; j++)  
  4.         {  
  5.             GLubyte c = (((i & 0x8) == 0) ^ ((j & 0x8) == 0) )*255;  
  6.             imageRBG[i][j][0] = imageRBG[i][j][1] = imageRBG[i][j][2] = c;  
  7.         }  
  8.     }  

GLubyte就是unsigned char  ,一个字节=八位

就是口口口口口口口口 (这里就是纯粹的口鼻的口)

看一下255对应就是11111111就是FF;

两个循环知道是64*64像素

(i & 0x8) == 0  这里判断是不是 大于等于8的奇数倍且小于8的偶数倍?是为1,否则为0 

1^1=0

0^0=0

1^0=1

0^1=1 

上面四个就是异或(没有进位的加)

1*255=FF                           黑色FF FF FF

0*255=00                           白色00 00 00

当i=0时,显然j=0-7涂白色,接着8-15涂黑色,白色,黑色……

……

当i=8时,显然j=0-7涂黑色,接着8-15图白色,黑色,白色……

……

以上就正好形成一个64*64但看到的是8*8的黑白棋盘,如图所示的一个面就是

在我们弄的纹理里面,图的四个角是这样的坐标。

(0,1)(1,1)

(0,0)(1,0)    

然后用三角片画的一个正方形是有两个三角片构成。

b---c

| / |

a---d

上面贴的图三角形abc-00-01-11  三角形acd-00-11-10

normals[Index] = normal; points[Index] = vertices[a]; tex_coords[Index] = vec2(0.0, 0.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[b]; tex_coords[Index] = vec2(0.0, 1.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[c]; tex_coords[Index] = vec2(1.0, 1.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[a]; tex_coords[Index] = vec2(0.0, 0.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[c]; tex_coords[Index] = vec2(1.0, 1.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[d]; tex_coords[Index] = vec2(1.0, 0.0); Index++;新增或有更改


另一个有贴不一样的,三角形abc-00-11-01  三角形acd-00-11-01(明显前一个三角形贴图是扭曲过的)
normals[Index] = normal; points[Index] = vertices[a]; tex_coords[Index] = vec2(0.0, 0.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[b]; tex_coords[Index] = vec2(1.0, 1.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[c]; tex_coords[Index] = vec2(0.0, 1.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[a]; tex_coords[Index] = vec2(0.0, 0.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[c]; tex_coords[Index] = vec2(1.0, 1.0); Index++;新增或有更改
normals[Index] = normal; points[Index] = vertices[d]; tex_coords[Index] = vec2(0.0, 1.0); Index++;新增或有更改

下面图片是旋转等变换以后截的图

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenGL球面纹理贴图是一种在球体上应用纹理的技术。在OpenGL中,为了使用球面纹理贴图,我们需要首先创建一个球体模型。这可以通过绘制一系列的三角形面片来实现,形成一个球体的表面。接下来,我们需要为球体模型创建一个纹理对象,并加载对应的纹理图像。 在加载纹理图像之后,我们需要设置一些纹理参数,例如缩小过滤和放大过滤的方式。然后,我们可以使用OpenGL纹理映射功能来将纹理图像应用到球体上的各个面片上。 在球面纹理贴图的过程中,需要将纹理坐标映射到球体的表面上。一种常用的方法是使用球坐标系来表示纹理坐标。球坐标系包括两个角度参数:纹理纬度和纹理经度。纹理纬度决定了纹理在球体上的垂直位置,而纹理经度则决定了纹理在球体上的水平位置。 在绘制球体的过程中,我们需要为每个顶点指定纹理坐标。可以根据对应的球面坐标来计算纹理坐标,并将其与顶点一起传递给着色器。在着色器中,可以使用纹理坐标来对纹理进行采样,并将采样到的纹素值与球体的法向量进行组合,从而得到最终的颜色值。 通过这种方式,我们可以在球体表面上实现复杂的纹理图案,例如地球表面的地形、云层等效果。同时,球面纹理贴图还可以应用于球体的各个部分,实现不同部分具有不同纹理的效果。 总而言之,OpenGL的球面纹理贴图技术可以使我们在球体上实现各种有趣的纹理效果,扩展了实时渲染的创作可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值