Понимание glTexCoord2f (), glVertex3f () в OpenGL

Я пытаюсь встроить поддержку 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();

0

Решение

Я пытаюсь встроить поддержку OculusRift в наше программное обеспечение для автосимулятора в нашем институте. В связи с тем, как настроено программное обеспечение симулятора, мы решили исправить искажения, связанные с тем, что на стороне линз клиентская сторона создала список отображения с OpenGL для запуска первых тестов.

Остановись прямо там! Вы нацелены на отображение VR, что означает, что вы должны использовать метод рисования с максимальной производительностью, который вы можете получить для рисования динамических сеток (требуется для изменения времени). Списки отображения не могут этого сделать. Собственно непосредственный режим (glBeginglEnd) создает большую нагрузку на процессор, а это именно то, чего вы не хотите.

1

Другие решения

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));

glColor4f ожидает, что значения с плавающей запятой зажаты между 0 и 1. Однако вы передаете его байты. Возможно, вы путаете это с glColor4b?

0

По вопросам рекламы [email protected]