Я пытаюсь встроить поддержку 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();
glVertex
эффективно завершает вершины, принимая атрибуты last, указанные вами с помощьюglColor
,glTexCoord
,glNormal
и т. д., и связывая их с новой вершиной. На самом деле вам не нужно вызывать ничего, кромеglVertex
для каждой вершины, потому что будут использоваться старые значения для всех этих состояний, если вы их не измените. Итак, скажем, у вас есть цвет для каждого треугольника, а не для каждой вершины, вы можете переместитьglColor4f
из этого цикла. - person Andon M. Coleman   schedule 27.11.2014