|
发表于 2012-11-16 12:20:02
|
显示全部楼层
你得再研究一下OpenGL关于纹理自动生成的部分的知识。
在OpenGL中的纹理自动生成包括GL_OBJECT_LINEAR,GL_EYE_LINEAR,GL_SPHERE_MAP,GL_NORMAL_MAP,GL_REFLECTION_MAP五种,
其中前三种是主要应用于一维纹理、二维纹理、三维纹理,后两种是立方体纹理之中应用的映射模式。
所以,当你使用一个二维纹理映射的时候,你的映射模式不应该是GL_NORMAL_MAP。下面是一段OpenGL的法线映射代码:- GLuint tex_cube;
- glGenTextures(1,&tex_cube);
- glBindTexture(GL_TEXTURE_CUBE_MAP,tex_cube);
- glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_S,GL_CLAMP);
- glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_T,GL_CLAMP);
- glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_R,GL_CLAMP);
- glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- Images image[6];//6张纹理图片,注意要大小一样,且为正方形,如果你的OpenGL驱动程序不支持GL_ARB_texture_non_power_of_two的话,图片的大小应该缩放为2的幂(调用gluScaleImage()可以完成此功能)
- for(int i=0;i<6;i++)
- {
- glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,0,image[i].format,image[i].width,image[i].height,image[i].border,image[i].format,image[i].type,image[i].data);
- }
- glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
- //enable texture cube map
- glEnable(GL_TEXTURE_CUBE_MAP);
- //texture coordinate generation
- glEnable(GL_TEXTURE_GEN_S);
- glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_NORMAL_MAP);
- glEnable(GL_TEXTURE_GEN_T);
- glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_NORMAL_MAP);
- glEnable(GL_TEXTURE_GEN_R);
- glTexGeni(GL_R,GL_TEXTURE_GEN_MODE,GL_NORMAL_MAP);
- //
- draw();//绘制你要给制的物体
- //禁止它们
- glDisable(GL_TEXTURE_GEN_S);
- glDisable(GL_TEXTURE_GEN_T);
- glDisable(GL_TEXTURE_GEN_R);
- glDisable(GL_TEXTURE_CUBE_MAP);
- //
- glDeleteTextures(1,&tex_cube);
复制代码 |
|