在整个周末挣扎之后,我终于在OpenGL中拥有了一个反映其环境的球体。看起来差不多不错。问题是,某些功能不一致。除了红皮书中的一个两页的部分和一些零散的、大部分未完成的论坛主题之外,我找不到关于OpenGL球体映射主题的太多信息。不确定是否有必要,但我在加载纹理的地方包含了我的代码。经过反复试验,我发现对称尺寸的freom 0到512获得了最好的结果,但它们仍然不完美(尺寸必须是2的幂,否则会崩溃)。有人知道有什么策略可以让纹理排列得更准确吗?
void loadcubemaptextures()。{
glgentextures(1,&cubemap);
glbindtexture(gl_texture_cube_map,cube map);
gltexparameteri(gl_texture_2d,gl_texture_wrap_s,gl_repeat);
gltexparameteri(gl_texture_2d,gl_texture_wrap_t,gl_repeat);
gltexparameteri(gl_texture_2d,gl_texture_wrap_r,gl_repeat);
gltexparameteri(gl_texture_2d,gl_texture_min_filter,gl_linear);
gltexparameteri(gl_texture_2d,gl_texture_mag_filter,gl_linear);
gldrawbuffer(gl_aux1);
glreadbuffer(gl_aux1);
glmatrixmode(gl_模型视图);
//生成立方体贴图纹理
对于(int i=0;i<6;i++){
glclear(gl_color_buffer_bit_gl_depth_buffer_bit);
glloadIdentity();
//查看转换
GluLookat(位置[0],位置[1],位置[2],
视图\u pos[i][0]、视图\u pos[i][1]、视图\u pos[i][2],
顶部[I][0],顶部[I][1],顶部[I][2]);
glmatrixmode(gl_投影);
glloadIdentity();
GluPerspective(90.0,1.0,cubemapradius+1200.0);
glmatrixmode(gl_模型视图);
RelDead();
glcopytextimage2d(gl_纹理_立方体_映射_正_x+i,0,gl_rgb,0,0,256,256,0);
}
< /代码> <经过整个周末的挣扎,我终于在OpenGL中找到了一个反映其环境的球体。看起来差不多不错。问题是,某些功能不一致。除了红皮书中的一个两页的部分和一些零散的、大部分未完成的论坛主题之外,我找不到关于OpenGL球体映射主题的太多信息。不确定是否有必要,但我在加载纹理的地方包含了我的代码。经过反复试验,我发现对称尺寸的freom 0到512获得了最好的结果,但它们仍然不完美(尺寸必须是2的幂,否则会崩溃)。有人知道有什么策略可以让纹理排列得更准确吗?
void loadCubemapTextures(){
glGenTextures(1, &cubemap);
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glDrawBuffer(GL_AUX1);
glReadBuffer(GL_AUX1);
glMatrixMode(GL_MODELVIEW);
//Generate cube map textures
for(int i = 0; i < 6; i++){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
//Viewing Transformation
gluLookAt(pos[0], pos[1], pos[2],
view_pos[i][0], view_pos[i][1], view_pos[i][2],
top[i][0], top[i][1], top[i][2]);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0, 1.0, cubemapRadius + 1, 200.0);
glMatrixMode(GL_MODELVIEW);
render();
glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, 0, 0, 256, 256, 0);
}