2011-10-15 62 views
5

Tôi đang tạo một ứng dụng iPhone với cocos2d và tôi đang cố gắng sử dụng mã OpenGL ES 1.1 sau đây. Tuy nhiên, tôi không tốt với OpenGL và ứng dụng của tôi sử dụng OpenGL ES 2.0 vì vậy tôi cần phải chuyển đổi nó.OpenGL ES 1.1 đến 2.0 có thay đổi lớn không?

Vì vậy, tôi đã tự hỏi, sẽ khó khăn như thế nào khi chuyển đổi mã sau từ ES 1.1 sang ES 2.0? Có một số nguồn có thể cho tôi biết những phương pháp cần thay thế vv?

-(void) draw 
{ 
    glDisableClientState(GL_COLOR_ARRAY); 
    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    glDisable(GL_TEXTURE_2D); 

    glColor4ub(_color.r, _color.g, _color.b, _opacity); 
    glLineWidth(1.0f); 
    glEnable(GL_LINE_SMOOTH); 

    if (_opacity != 255) 
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    //non-GL code here 

    if (_opacity != 255) 
     glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST); 

    glEnableClientState(GL_COLOR_ARRAY); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnable(GL_TEXTURE_2D); 
} 
+0

Chúng ta đang nói về ES hoặc máy tính để bàn ở đây? Tạo nên sự khác biệt lớn. Trong trường hợp trước đây (reomve thẻ opengl) nó sẽ không được dễ dàng. Trong trường hợp sau (loại bỏ các thẻ es) không nên có bất kỳ vấn đề bảo vệ. –

+0

Xin chào, đó là iPhone nên ES. – FBryant87

+1

Ah vâng, phải có quá nhiều điều đó. Trong trường hợp này việc chuyển đổi sẽ không dễ dàng như thế và bạn cần truy cập vào trình đổ bóng GLSL. –

Trả lời

9

Sẽ không dễ dàng gì nếu bạn không phù hợp với OpenGL.

OpenGL ES 2.0 không còn có đường ống chức năng cố định nữa. Điều này có nghĩa là bạn phải quản lý các biến đổi đỉnh, ánh sáng, texturing và giống như tất cả chính mình bằng cách sử dụng GLSL vertex và fragment shaders. Bạn cũng phải tự theo dõi các ma trận chuyển đổi, không có glMatrixMode, glPushMatrix, glTranslate, ... nữa.

Cũng không còn thuộc tính đỉnh buitlin nữa (như glVertex, glColor, ...). Vì vậy, các chức năng này, cùng với các hàm mảng tương ứng (như glVertexPointer, glColorPointer, ...) và gl(En/Dis)ableClientState, cũng đã được chuẩn bị lại. Thay vào đó, bạn cần các hàm thuộc tính đỉnh chung (glVertexAttrib, glVertexAttribPointergl(En/Dis)ableVertexAttribArray, hoạt động tương tự) cùng với trình đổ bóng đỉnh tương ứng để cung cấp cho các thuộc tính này ý nghĩa chính xác của chúng.

Tôi đề nghị bạn nên xem một cuốn sách hay hướng dẫn OpenGL ES 2.0 tốt, vì việc chuyển từ 1.1 sang 2.0 thực sự là một thay đổi lớn, ít nhất là nếu bạn chưa bao giờ nghe bất cứ điều gì về shaders.

+1

Cũng xin cảm ơn, tôi có thể thử 2.0 từ đầu. Tôi hiểu 2.0 cung cấp nhiều khả năng hơn, nhưng họ cũng không thể cung cấp các phím tắt 1.1? Tôi thấy không thể tin được rằng họ ngồi đó và nghĩ rằng "Tôi biết, trong phiên bản 2.0 chúng tôi sẽ đưa ra mọi thứ và để mọi người tự làm tất cả". Tôi không nhớ dành thời gian để tìm hiểu một số điều cấp thấp nhưng nhìn vào một số hướng dẫn nó mất khoảng một giờ để làm cho một khối lập phương quay. Tôi ngạc nhiên vì vẽ một đường nét đơn giản, vv ai đó đã không đến với cái gì tốt hơn. – FBryant87

+1

@ user666254 Bạn thực sự đúng là việc thiết lập những thứ đơn giản đòi hỏi nhiều công sức hơn và nó cũng khó học hơn cho người mới bắt đầu, vì bạn không thể làm được gì nhiều nếu không hiểu toàn bộ API và đường ống. Nhưng mặt khác, bây giờ nó khó khăn hơn nhiều để làm những điều sai trái (như 'glBegin/glEnd', ...) và API thì sạch hơn nhiều. Và bạn sẽ không tìm thấy bất kỳ ứng dụng nghiêm túc nào không sử dụng các trình đổ bóng (có thể hôm nay, nhưng chắc chắn không phải ngày mai). –

+1

@ user666254 Có điều gì đó tốt hơn? Một nhà cung cấp phần cứng API tăng tốc phần cứng mới phải hỗ trợ, điều đó đạt được một tập hợp con các khả năng đã tồn tại? Không có khả năng xảy ra. Đối với những điều đơn giản, bạn vẫn có thể sử dụng OpenGL ES 1.1, tất nhiên. Nhưng một nơi nào đó phải được tiến bộ trong tương lai. –

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