OpenGLを初めて使用しました。したがって、私は以下の事項について何らかの助けを必要とします。私はJavaを扱うために使用していたので、画面座標に対してビューポートの座標を生成する方法と、C++で生成する方法についてはわかりません。OpenGL。 Window-To-Viewport変換
この質問では、関数worldToViewportTransformを実装する必要があります。
この関数は、(ワールド)ウィンドウツービューポート変換に使用される2D正投影投影行列を実装します。 OpenGLでは、この行列はgluOrtho2Dによって定義されます。
入力は、ワールドウィンドウ(winLeft、winRight、winBottom、winTop)、画面上のビューポート(ウィンドウ)の上端(windowX、windowY)、およびビューポートのサイズウィンドウ)(windowWidth、windowHeight)。
出力は、ワールド・ツー・ビューポート変換を構成する値A、B、CおよびDです。
答えには、以下の関数形式を使用する必要があります。コピーして不足しているコードを記入してください。関数は、CoderunnerがC++表記法を受け入れていないようであるため、値A、B、C、Dにポインタ変数を使用します。以下のコードセグメントはポインタ変数をdouble値に変換して返します。 。
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)=( - 200367)
//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);