Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C OpenGL:球体纹理出现异常_C_Opengl - Fatal编程技术网

C OpenGL:球体纹理出现异常

C OpenGL:球体纹理出现异常,c,opengl,C,Opengl,我目前正在尝试将此池球纹理映射到我创建的球体。我的做法如下: 生成球体顶点 对于每个球体顶点,将该顶点坐标从openGL世界转换为纹理坐标。 我希望带有“1”的白色圆圈在z=1时出现在球体顶部,因此我使用球体顶点的x和z坐标 我正在使用的纹理文件具有多个纹理。下面的纹理就是我所关心的。在纹理文件中,此特定纹理的左上角为0.01,0.01,右下角为0.24,0.24。如果我的数学是正确的,这使得死点在0.115,0.115左右。因为我希望白色圆圈位于球z=1的顶部,所以我想出了以下两行代码来映射这

我目前正在尝试将此池球纹理映射到我创建的球体。我的做法如下:

生成球体顶点 对于每个球体顶点,将该顶点坐标从openGL世界转换为纹理坐标。 我希望带有“1”的白色圆圈在z=1时出现在球体顶部,因此我使用球体顶点的x和z坐标

我正在使用的纹理文件具有多个纹理。下面的纹理就是我所关心的。在纹理文件中,此特定纹理的左上角为0.01,0.01,右下角为0.24,0.24。如果我的数学是正确的,这使得死点在0.115,0.115左右。因为我希望白色圆圈位于球z=1的顶部,所以我想出了以下两行代码来映射这些点:

tex_coords[i].x = 0.125 + (verticies[i].x)*0.115;
tex_coords[i].y = 0.125 + (verticies[i].z)*0.115;
我的逻辑是,如果x或z是0,则相应的坐标是0.115,正好在中间。否则,X和Z的范围从-1到1,因此我们可以达到的最大值是0.24,最小值是0.01

正如您在底部屏幕截图中所看到的,出现了一些问题。如果你仔细观察,你会发现球体的一小部分是白色的


我的一个着色器和init函数之间存在差异。我在着色器中有一个名为vTexCoord的变量,但在init函数中使用了vTexCoords。

您昨天询问并删除了完全相同的问题。现在发生了什么变化?如果顶点是球体网格顶点,那么您需要首先转换它们,我在您发布的代码中没有看到这些顶点,也不要忘记记住球体的中心是什么。。。然后将生成的狭长角度转换为纹理范围。。。更容易/更快的是在传入VBO之前在CPU端预先计算坐标。。。