• 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);//模型列表


     

  • 相关阅读:
    Python – GitHub CentOS
    Python – GitHub Ubuntu
    学习jQuery Treeview一天的感受
    让我郁闷了一个下午的list为null
    在徘徊中前进的一天
    都是被逼的,被逼的
    和技术无关,生活中的一点感受
    我又错了
    忽然的感受
    学习jQuery的一天
  • 原文地址:https://www.cnblogs.com/fangxiang/p/585384.html
Copyright © 2020-2023  润新知