Я новичок в OpenGL. Поэтому я нуждаюсь в некоторой помощи в этом вопросе, описанном ниже. Я не уверен, как создавать координаты видового экрана по отношению к экранным координатам, а также создавать его на C++, поскольку я имел дело с Java.OpenGL. Преобразование Window-To-Viewport
В этом вопросе мне нужно реализовать функцию worldToViewportTransform.
Функция реализует двумерную матрицу ортографического проектирования, которая используется для преобразования (в мир) окна-в-вид. В OpenGL эта матрица определяется gluOrtho2D.
Ввод - это координаты мирового окна (winLeft, winRight, winBottom, winTop), верхний левый угол окна просмотра (окна) на экране (windowX, windowY) и размер окна просмотра (окна) на экране (windowWidth, windowHeight).
Вывод - это значения A, B, C и D, которые составляют преобразование мира в вид.
Ответ должен использовать формат функции ниже - скопируйте его и заполните недостающий код. Функция использует переменные указателя для значений A, B, C и D, поскольку Coderunner, похоже, не принимает нотацию C++ - сегмент кода ниже преобразует переменные указателя в двойные значения и обратно, поэтому вам не нужно понимать, как работают указатели ,
void worldToViewportTransform (double winLeft, double winRight, double winBottom, double winTop,
int windowX, int windowY, int windowWidth, int windowHeight,
double* APtr, double* BPtr, double* CPtr, double* DPtr)
{
double A=*APtr, B=*BPtr, C=*CPtr, D=*DPtr;
<INSERT YOUR CODE HERE>
*APtr=A; *BPtr=B; *CPtr=C; *DPtr=D;
}
конкретного теста случай должен выводит: (U, V) = (- 200,367)
//Code for Testing
double A, B, C, D;
double winLeft=1.5, winRight=4.5, winBottom=0.0, winTop=3.0;
int windowX=100, windowY=100, windowWidth=600, windowHeight=400;
worldToViewportTransform(winLeft, winRight, winBottom, winTop,
windowX, windowY, windowWidth, windowHeight,
&A, &B, &C, &D);
// Test cases
double x, y; // world coordinates
int u, v; // window coordinates
x=0.0f; y=1.0f;
u=(int) floor(A*x+C+0.5f);
v=(int) floor(B*y+D+0.5f);
printf("(u,v)=(%d,%d)",u,v);