检索鼠标下的纹理坐标

时间:2015-05-18 19:55:09

标签: qt4 textures opengl-3 mouse-picking qtopengl

我正在使用Qt 4.8及其OpenGL模块,使用固定管道,我有一个立方体贴图的球体,每个立方体面的tex坐标由{{1自动生成通过OpenGL(R,S和T坐标)。

glTexGenf

点击场景时,我正在通过glEnableClientState(GL_NORMAL_ARRAY); const GLenum textgt = GL_TEXTURE_CUBE_MAP; const GLfloat param = GL_REFLECTION_MAP; glTexGenf( GL_S, GL_TEXTURE_GEN_MODE, param ); GLenum error = glGetError(); if(GL_NO_ERROR != error) { ... } glTexGenf( GL_T, GL_TEXTURE_GEN_MODE, param ); error = glGetError(); if(GL_NO_ERROR != error) { ... } glTexGenf( GL_R, GL_TEXTURE_GEN_MODE, param ); error = glGetError(); if(GL_NO_ERROR != error) { ... } glEnable( GL_TEXTURE_GEN_S ); glEnable( GL_TEXTURE_GEN_T ); glEnable( GL_TEXTURE_GEN_R ); glReadPixels检索鼠标光标下的顶点坐标。

我现在正在寻找的是一种检索与该职位相关联的gluUnProject的方法。我没有找到关于这个主题的任何内容,所以我想知道是否有办法实现这一目标。

1 个答案:

答案 0 :(得分:0)

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

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

r = u - 2nT(nu)

然后,我们正在寻找的STR坐标将分别为

rx, ry, rz

此外,there's a web将公式“翻译”为伪代码。我将在此处发布GL_REFLECTION_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;
 }