簡體   English   中英

iPhone OpenGL ES - 如何選擇

[英]iPhone OpenGL ES - How to Pick

我正在開發一個OpenGL ES1應用程序,它可以顯示2D網格並允許用戶導航和縮放/旋轉它。 我需要知道View Touch坐標到我的opengl世界和網格單元的確切轉換。 是否有任何助手可以完成我為導航做的最后幾次變換的反向? 或者我應該手工計算並做矩陣的東西?

聽起來像你正在尋找的是一個非項目方法。 glut庫附帶一個,但它在OpenGL ES上不可用。 您可以自己重寫過剩代碼以兼容iphone您也可以編寫自己的代碼來進行非項目,這需要將接觸點縮放到您的視口,將其乘以投影*模型視圖矩陣的倒數,然后除以w得到一個3D矢量。

揀配模式在openGL ES中不可用。 但是使用從當前openGL狀態檢索的投影矩陣可以很容易地計算任何3d點的屏幕坐標。 我是這樣做的(IMPoint2D和IMPoint3D是基本(x,y)和(x,y,z)結構)

+ (IMPoint2D) getScreenCoorOfPoint:(IMPoint3D)_point3D
{
    GLfloat     p[16];                                              // Where The 16 Doubles Of The Projection Matrix Are To Be Stored
    glGetFloatv(GL_PROJECTION_MATRIX, p);                           // Retrieve The Projection Matrix
/*
Multiply M * point
*/
    GLfloat _p[] = {p[0]*_point3D.x +p[4]*_point3D.y +p[8]*_point3D.z + p[12],
                    p[1]*_point3D.x +p[5]*_point3D.y +p[9]*_point3D.z + p[13],
                    p[2]*_point3D.x +p[6]*_point3D.y +p[10]*_point3D.z+ p[14],
                    p[3]*_point3D.x +p[7]*_point3D.y +p[11]*_point3D.z+ p[15]};
/*
divide by scale factor
*/
    IMPoint2D _p2D = {_p[0]/_p[3], _p[1]/_p[3]};
/*
get result in screen coordinates. In this case I'm in landscape mode
*/
    return (IMPoint2D) {_p2D.x*240.0f + 240.0f, (1.0f - _p2D.y) *160.0f};
}

可以用GL_MODELVIEW_MATRIX做到這一點嗎? 或者GL_MODLVIEW,我沒有修改視圖位置,只有del modelview。 我這樣做:

            glMatrixMode(GL_MODELVIEW);

// Setup model view matrix
            glLoadIdentity();
            [gAccel GetAccelerometerMatrix:(GLfloat *) matrix headingX:headx headingY: heady headingZ:headz];

            // Finally load matrix
            glLoadMatrixf((GLfloat*)matrix);

            glPushMatrix();
            glRotatef(-90, 1, 0, 0);
            glScalef(0.0005, 0.0005, 0.0005);
            glTranslatef(x, 0.0, z);

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM