私たちの研究所で、OculusRift のサポートを自動車シミュレーター ソフトウェアに組み込もうとしています。シミュレーター ソフトウェアのセットアップ方法により、最初のテストを実行するためにクライアント側で OpenGL を使用して表示リストを作成するレンズによる歪みを修正することにしました。
基本的に、私が少し苦労しているのは、OpenGL が (表示リストのために) 描画を行う方法を理解することです。さまざまなチュートリアルの情報を使用しましたが、それを正しく理解していれば、次の for ループは Tex 0,1,2 の座標を選択し、いくつかの口径食を行い、それを各ベティスにバインドします。は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();