在整个周末挣扎之后,我终于有了一个反映OpenGL环境的球体。它几乎看起来不错。问题是,某些功能没有排队。我找不到关于OpenGL球体映射主题的更多信息,在红皮书的两页部分以及一些分散的,大部分未完成的论坛主题之外。不确定它是否必要,但我在加载纹理的地方包含了我的代码。经过反复试验,我发现从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);
}
答案 0 :(得分:1)
你的墙壁缺乏足够的功能,使他们的方向和位置清晰,但我敢打赌这是问题。
view_pos
和top
中的值是定义它们的值。在看起来可疑的事情中:
无论如何,为了解决这个问题,您可以确保您的值符合正确的立方体贴图定义(如检查所有规范),或者在添加足够的几何图形后执行一系列试验和错误弄清楚每张脸的方向是什么。
答案 1 :(得分:0)
问题与坐标无关,感谢输入。我忘了设置视图矩阵了...在for循环中对gluViewport的简单调用为我修复了它。