【发布时间】:2010-09-20 17:25:09
【问题描述】:
经过整个周末的努力,我终于在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);
}
【问题讨论】:
-
我不知道我是否可以发布一张图片,我知道这会有所帮助...有一个矩形房间,在立方体贴图球体的前面和左侧悬挂着一个地球仪.立方体贴图球体反射环境,但立方体贴图纹理相交处的接缝未正确对齐,因此地球的反射看起来像是被切成两半。
-
如果需要,使用外部图像存储。但是“事情看起来不对劲”确实需要一张图片。
-
好的,我发布了一张图片。这很容易,大声笑