Qt4 在鼠标下检索纹理坐标

Qt4 在鼠标下检索纹理坐标,qt4,textures,opengl-3,mouse-picking,qtopengl,Qt4,Textures,Opengl 3,Mouse Picking,Qtopengl,我使用的是Qt 4.8及其OpenGL模块,使用固定管道,我有一个立方体映射的球体,每个立方体面的tex坐标由OpenGL通过glTexGenf自动生成(R、S和T坐标) 在场景中单击时,我通过glReadPixels和glunproject检索鼠标光标下的顶点坐标 我现在寻找的是一种检索与该位置关联的纹理坐标的方法。我没有找到关于这个主题的任何东西,所以我想知道是否有办法做到这一点。在搜索了OpenGL规范后,我在1.3版本中找到了用于计算给定顶点的纹理的公式[第2章,第10节,第4部分-生成

我使用的是
Qt 4.8
及其
OpenGL
模块,使用固定管道,我有一个立方体映射的球体,每个立方体面的tex坐标由
OpenGL
通过
glTexGenf
自动生成(R、S和T坐标)

在场景中单击时,我通过
glReadPixels
glunproject
检索鼠标光标下的顶点坐标


我现在寻找的是一种检索与该位置关联的
纹理坐标的方法。我没有找到关于这个主题的任何东西,所以我想知道是否有办法做到这一点。

在搜索了
OpenGL
规范后,我在
1.3版本中找到了用于计算给定顶点的纹理的公式[第2章,第10节,第4部分-生成纹理坐标]

从从原点到眼睛坐标中顶点的单位向量
u
开始,并将
n
作为眼睛坐标中该顶点的法线,我们首先需要计算反射向量
r

r = u - 2nT(nu)
分别

此外,这将公式“转换”为伪代码。如果页面不可用,我将在此发布
GL\u REFLECTION\u MAP
的相关部分:

 for(i=0; i<total; i++)
 {
   myEyeVertex = MatrixTimesVector(ModelviewMatrix, myVertex[i]);
   myEyeVertex = Normalize(myEyeVertex);
   myEyeNormal = VectorTimesMatrix(myNormal[i], InverseModelviewMatrix);
   dotResult = 2.0 * dot3D(myEyeVertex, myEyeNormal);
   //I am emphasizing that we write to s and t and r. Used to sample a cubemap.
   myTexCoord[i].s = myEyeVertex.x - myEyeNormal.x * dotResult;
   myTexCoord[i].t = myEyeVertex.y - myEyeNormal.y * dotResult;
   myTexCoord[i].r = myEyeVertex.z - myEyeNormal.z * dotResult;
 }
(i=0;i)的

rx, ry, rz
 for(i=0; i<total; i++)
 {
   myEyeVertex = MatrixTimesVector(ModelviewMatrix, myVertex[i]);
   myEyeVertex = Normalize(myEyeVertex);
   myEyeNormal = VectorTimesMatrix(myNormal[i], InverseModelviewMatrix);
   dotResult = 2.0 * dot3D(myEyeVertex, myEyeNormal);
   //I am emphasizing that we write to s and t and r. Used to sample a cubemap.
   myTexCoord[i].s = myEyeVertex.x - myEyeNormal.x * dotResult;
   myTexCoord[i].t = myEyeVertex.y - myEyeNormal.y * dotResult;
   myTexCoord[i].r = myEyeVertex.z - myEyeNormal.z * dotResult;
 }