扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:青岛郎锐 来源:天极开发 2007年10月16日
关键字:
glShadeModel(GL_SMOOTH); // 启用阴影平滑 glEnable(GL_TEXTURE_2D); // 启用纹理映射 glPolygonMode(GL_BACK, GL_FILL); // 后表面以面建模完全填充 glPolygonMode(GL_FRONT, GL_FILL); // 前表面以点建模 AUX_RGBImageRec *TextureImage[1]; // 创建纹理的存储空间 memset(TextureImage, 0, sizeof(void*) * 1); // 清除图像记录,确保其内容为空 TextureImage[0] = auxDIBImageLoad(sPath); // 载入纹理位图并返回指针 glGenTextures(1, &m_nTexture[0]); // 创建纹理 glBindTexture(GL_TEXTURE_2D, m_nTexture[0]); //使用来自位图数据生成的典型纹理 // 生成纹理 glTexImage2D(GL_TEXTURE_2D, // 2D纹理 0, // 图像的详细程度 3, // R,G,B三种数据成分 TextureImage[0]->sizeX, // 纹理的宽度 TextureImage[0]->sizeY, // 纹理的高度 0, // 边框宽度 GL_RGB, // 图像数据由红、绿、蓝三色数据组成 GL_UNSIGNED_BYTE, // 组成图像的数据是无符号字节类型的 TextureImage[0]->data); // 纹理数据的来源 // 缩小得比原始纹理小时采用线形滤波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 比放大得原始纹理大时采用线形滤波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); if (TextureImage[0]) { // 检查纹理是否存在 if (TextureImage[0]->data) {// 检查纹理图像是否存在 free(TextureImage[0]->data); // 释放纹理图像占用的内存 } free(TextureImage[0]); // 释放图像结构 } |
glBindTexture(GL_TEXTURE_2D, m_nTexture[0]); // 选择纹理 float float_x; // 用来将纹理分割成很小的三角网格 float float_y; float float_xb; float float_yb; // 每一个小网格分别映射纹理的对应三角形区域(顺序同地景网格创建顺序) for (int i = 0; i < m_nDemX - 1; i++) { for (int j = 0; j < m_nDemY - 1; j++) { glBegin(GL_TRIANGLE_STRIP); // 开始三角带 float_x = float(i) / float(m_nDemX); float_y = float(j) / float(m_nDemY); float_xb = float(i + 1) / float(m_nDemX); float_yb = float(j + 1) / float(m_nDemY); glTexCoord2f(float_x, float_y); // 第一个纹理坐标 (左下角) glVertex3d(m_pDemX[j * m_nDemX + i], m_pDemY[j * m_nDemX + i], m_pDemH[j * m_nDemX + i]); glTexCoord2f(float_x, float_yb); // 第二个纹理坐标 (左上角) glVertex3d(m_pDemX[(j + 1) * m_nDemX + i], m_pDemY[(j + 1) * m_nDemX + i], m_pDemH[(j + 1) * m_nDemX + i]); glTexCoord2f(float_xb, float_y); // 第三个纹理坐标 (右下角) glVertex3d(m_pDemX[j * m_nDemX + i + 1], m_pDemY[j * m_nDemX + i + 1], m_pDemH[j * m_nDemX + i + 1]); glTexCoord2f(float_xb, float_yb); // 第四个纹理坐标 (右上角) glVertex3d(m_pDemX[(j + 1) * m_nDemX + i + 1], m_pDemY[(j + 1) * m_nDemX + i + 1], m_pDemH[(j + 1) * m_nDemX + i + 1]); glEnd(); // 停止定义三角带 } } } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者