我正在尝试将 OculusRift 支持内置到我们研究所的汽车模拟器软件中。由于模拟器软件的设置方式,我们决定修复由于镜头客户端使用 OpenGL 构建显示列表以运行第一次测试而导致的失真。
基本上我有点挣扎的是理解OpenGL是如何绘制的(用于显示列表)。我使用了来自不同教程的信息,如果我理解正确,下面的 for 循环将选择 Tex 0、1、2 的坐标做一些暗角并将其绑定到每个 vetice。会glBegin(GL_TRIANGLES)
自动从顶点绘制三角形。
顶点的坐标存储在地址ov
指向的结构中。此外,我们为每个颜色通道设置了偏移量。
以下代码从 OpenGL 角度截取是否正确?
ovrHmd_CreateDistortionMesh(pHmd, eyeRenderDesc[eyeNum].Eye, eyeRenderDesc[eyeNum].Fov,
ovrDistortionCap_Chromatic | ovrDistortionCap_Vignette, &meshData);
ovrDistortionVertex * ov = meshData.pVertexData;
// New compiled distortion-rendering display list
glNewList(drList, GL_COMPILE);
// Make triangles out of the vertices
glBegin(GL_TRIANGLES);
for (unsigned int vertNum = 0; vertNum < meshData.VertexCount; vertNum++) {
// Tex0,1,2 have already been activated
glMultiTexCoord2f(GL_TEXTURE0, ov->TanEyeAnglesR.x, ov->TanEyeAnglesR.y);
glMultiTexCoord2f(GL_TEXTURE1, ov->TanEyeAnglesG.x, ov->TanEyeAnglesG.y);
glMultiTexCoord2f(GL_TEXTURE2, ov->TanEyeAnglesB.x, ov->TanEyeAnglesB.y);
glColor4f(
(OVR::UByte)(ov->VignetteFactor * 255.99f),
(OVR::UByte)(ov->VignetteFactor * 255.99f),
(OVR::UByte)(ov->VignetteFactor * 255.99f),
(OVR::UByte)(ov->TimeWarpFactor * 255.99f));
glVertex3f(ov->ScreenPosNDC.x, ov->ScreenPosNDC.y, 0.5); // z: constant
ov++;
}
glEnd();
glEndList();