解读OpenGL棋盘纹理贴图

原创 2016年05月30日 22:28:20
  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++;////新增或有更改

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

 

版权声明:会者不难 不会者难

画棋盘—OpenGL

画一个棋盘,使用C++#include#include#include#include#include#include//////////////////////////////////void my...
  • yeqiu712
  • yeqiu712
  • 2009年12月15日 19:03
  • 1743

试用OpenGL实现用黑白相间的棋盘图案填充图形

计算机图形学第五次实验 试用OpenGL实现用黑白相间的棋盘图案填充图形 一、 实验目的 学会在OpenGL中写程序; 学会用OpenGL实现用黑白相间的棋盘图案填充多边形。 二、 实验内容...
  • wuxinliulei
  • wuxinliulei
  • 2013年06月16日 21:54
  • 1327

【OpenGL】纹理贴图实例-棋盘

简单的纹理贴图实例,来学习OpenGL的功能 //main.h #if !defined_MAIN_H_ #define _MAIN_H_ #include #define WIDTH 64 ...
  • lafay626
  • lafay626
  • 2017年01月06日 22:45
  • 672

解读OpenGL棋盘纹理贴图

for (int i = 0; i      {           for (int j = 0; j          {               GLubyte c = (((i & 0x8...
  • u014646950
  • u014646950
  • 2016年05月30日 22:28
  • 895

OpenGL实现纹理贴图,绘制两个棋盘

  • 2015年04月25日 16:33
  • 11.09MB
  • 下载

程序生成棋盘格纹理

GLubyte image[64][64][3]; int i, j, c; for(i=0;i
  • china200_ok
  • china200_ok
  • 2010年08月10日 21:17
  • 1162

OpenGL--纹理贴图基础

理论基础 纹理贴图:通俗地讲就是可以把我们读取的纹理加载到图元表面的一种技术,这样大大的提高了图像的表现质量。实例代码 //读取tga格式图片/*tga图片头信息结构*/ #pragma pack...
  • u010223072
  • u010223072
  • 2015年04月18日 17:07
  • 2369

简单五子棋(使用C++与OpenGL实现,带有源码)

  • 2009年11月24日 20:34
  • 4.66MB
  • 下载

OpenGL: 绘制漂亮的围棋子

作为一个围棋爱好者兼程序员,多年以来开发过很多与围棋有关的软件,诸如围棋打谱软件、棋谱管理软件、围棋棋谱下载软件、围棋网站下载软件……而其中,围棋打谱软件开发的次数最多,读书的时候就编写过一个简易的围...
  • Augusdi
  • Augusdi
  • 2014年03月04日 16:24
  • 4330

OpenGL——纹理贴图

1. 创建纹理图像   OpenGL要求纹理的高度和宽度都必须是2的n次方大小,只有满足这个条件,这个纹理图片才是有效的。     一旦获取了像素值,我们就可以将这些数据传给OpenGL,让OpenG...
  • L_Andy
  • L_Andy
  • 2016年08月28日 20:22
  • 2259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解读OpenGL棋盘纹理贴图
举报原因:
原因补充:

(最多只允许输入30个字)