3D纹理和过程纹理

过程纹理可以生成自然界中的很多图案,如模拟出云彩,大理石,木材。
一般都需要使用perlin noise函数,这个函数是连续的,因此图像的明暗
过渡是平滑的。
可以将过程纹理扩展到三维,这样就生成3D纹理,3D纹理是很费内存的。
用Opengl处理的代码如下:
1,创造3D纹理
glGenTextures(1, &texname); 
glBindTexture(GL_TEXTURE_3D, texname); 
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_R,GL_CLAMP_TO_EDGE);

glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB8, WIDTH, HEIGHT, DEPTH, 0, GL_RGB, GL_UNSIGNED_BYTE,
  tex); //tex是生成过程纹理的函数
2,生成纹理坐标
float xPlane[] = {1.0f, 0.0f, 0.0f, 0.0f};
float yPlane[] = {0.0f, 1.0f, 0.0f, 0.0f};
float zPlane[] = {0.0f, 0.0f, 1.0f, 0.0f}; 
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);
glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);
glTexGeni(GL_R,GL_TEXTURE_GEN_MODE,GL_EYE_LINEAR);

glTexGenfv(GL_S,GL_EYE_PLANE,xPlane);
glTexGenfv(GL_T,GL_EYE_PLANE,yPlane);
glTexGenfv(GL_R,GL_EYE_PLANE,zPlane);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);

glMatrixMode(GL_TEXTURE);
glEnable(GL_TEXTURE_3D);
glLoadIdentity();
glTranslatef(0.5f,0.5f,0.5f);
glScalef(0.5f,0.5f,0.5f);
glMultMatrixf(mat);//MODELVIEW matrix 转置矩阵

glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D, texname);
glCallList(list);//模型列表


 

原文地址:https://www.cnblogs.com/fangxiang/p/585384.html