2008-11-07 25 views
17

Dường như tất cả tài liệu tôi có thể tìm thấy về OpenGL-ES đều nói điều gì đó về hiệu ứng của "OpenGL-ES giống như OpenGL, nhưng không có nhiều thứ. Chẳng hạn, không có glBegin hoặc glEnd. "Có gì "trong" và "ngoài" của OpenGL-ES? (Chuyển từ OpenGL)

Ok, điều đó thật tuyệt. Vì vậy, những gì ELSE không có bất kỳ của? Hoặc có danh sách số trong số không? Hoặc có thể là một hướng dẫn chuyển?

(Cụ thể, tôi đang cố gắng để di chuyển một ứng dụng GL hiện có để iPhone, mặc dù tôi không muốn thiết phải giới hạn Q của tôi cho iPhone.)

Trả lời

12

Các "OpenGL ES 1.1.12 Difference Specification" (PDF) liên kết đến từ the OpenGL ES 1.X info page at Khronos.org trải qua sự khác biệt giữa OpenGL ES 1.X và OpenGL 1.5. OpenGL ES 1.1 là phiên bản được sử dụng trên iPhone.

Đặc tả khác biệt không phải là tài liệu đơn giản nhất mà tôi từng thấy, nhưng nó dễ đọc hơn các thông số kỹ thuật OpenGL nói chung. Tôi khuyên bạn nên nhận danh sách các hàm OpenGL mà bạn gọi và sau đó tìm kiếm thông qua tài liệu khác biệt cho chúng. Nó sẽ hiển thị cho bạn nếu chúng được hỗ trợ trong OpenGL ES, và nếu hỗ trợ chỉ là một phần, bạn có thể đi đến thông số đầy đủ để biết thêm thông tin.

+0

Ok, hoạt động. Xin lỗi, mới đối với ES và không tìm thấy trang Khronos cho đến khi đăng câu hỏi (d'oh!) – Olie

13

Một phần của sự cố khi trả lời câu hỏi của bạn là có nhiều thứ bị thiếu và thường là một bộ cờ bit hiếm khi được sử dụng hoặc không áp dụng. Các tài liệu tốt nhất mô tả sự khác biệt thực sự là các tiêu đề thực hiện.

Đối với khuôn khổ tôi đang làm việc trên, tôi đã quyết định biến nó thành nền tảng hoàn toàn giữa máy tính để bàn và iPhone. Cách tiếp cận mà tôi thực hiện trong việc tìm ra nó là viết mã trong OpenGL và xem nó ở đâu. Sau đó tìm trong

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/ System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h

và so sánh nó với

/Developer/SDKs/MacOSX10.5.sdk/ System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h

Những tiêu đề là rất đơn giản và dễ làm theo.

Sự khác biệt chính mà tôi đã phát hiện cho đến nay là không có GLdouble (bất cứ điều gì sử dụng GLdouble như glOrtho và glFrustum có một phiên bản GLFloat glOrthof và glFrustumf). Ngoài ra không có gluPerspective hoặc gluPerspectivef vì lý do nào đó.

Đây là một thả thay thế:

void gluPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar) 
{ 
    GLfloat xmin, xmax, ymin, ymax; 

    ymax = zNear * tan(fovy * M_PI/360.0); 
    ymin = -ymax; 
    xmin = ymin * aspect; 
    xmax = ymax * aspect; 

    glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar); 
} 

Vì bạn không có glBegin và glEnd, bạn phải làm tất cả mọi thứ thông qua glDrawArray hoặc glDrawElements (ưu tiên). Một cách nhanh chóng và dơ bẩn dụ:

void draw(short x, short y, short w, short h) 
{ 
    const GLshort t[8] = { 0, 0, 1, 0, 1, 1, 0, 1 }; 
    const GLshort v[8] = { x, y, x+w, y, x+w, y+h, x, y+h }; 

    glVertexPointer(2, GL_SHORT, 0, v); 
    glEnableClientState(GL_VERTEX_ARRAY); 

    glTexCoordPointer(2, GL_SHORT, 0, t); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

    glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 
} 

Check-out Lưu ý kỹ thuật của Apple TN2230 "Optimizing OpenGL ES for iPhone OS" cho một số gợi ý khác mà có thể có ích trong việc porting.

Porting cho đến nay đã khá đau đớn đối với tôi và trừ khi ứng dụng của bạn thực hiện một số công cụ OGL khá tiên tiến hoặc sử dụng chức năng hoàn toàn không được hỗ trợ, bạn sẽ thấy vấn đề của mình bằng cách nhấn nút xây dựng và sửa lỗi đơn giản một chút trong các tập tin gl.h. Trong thực tế, chuyển sang loại ES của lực lượng bạn viết mã dựng hình được tối ưu hóa tốt.

+0

Thú vị: tôi dường như không thể tìm thấy ghi chú công nghệ đó ở bất cứ đâu.Bất kỳ ý tưởng? – cbrulak

+0

Đây là liên kết trực tiếp, mặc dù bạn rõ ràng sẽ cần truy cập iPhone Developer (miễn phí). http://developer.apple.com/iphone/library/technotes/tn2008/tn2230.html –

+0

Không - Apple có (đặc trưng) chỉ đơn giản là xóa trang, bởi ngoại hình của mọi thứ. :( – Adam

Các vấn đề liên quan