Tôi đang theo dõi this tutorial về OpenGL/GLKit dành cho iOS nhưng cố gắng triển khai nó trong Swift. Nó sẽ tốt cho đến khi tôi nhận được cho phần này:Làm cách nào để chuyển đổi phép toán con trỏ OpenGL thành Swift?
- (void)render {
// 1
self.effect.texture2d0.name = self.textureInfo.name;
self.effect.texture2d0.enabled = YES;
// 2
[self.effect prepareToDraw];
// 3
glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
//---------------- This is where things break down...
long offset = (long)&_quad;
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, sizeof(TexturedVertex), (void *) (offset + offsetof(TexturedVertex, geometryVertex)));
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(TexturedVertex), (void *) (offset + offsetof(TexturedVertex, textureVertex)));
// 5
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
@end
tôi có một tài sản self.quad
đó là một Swift struct như thế này:
struct TexturedVertex {
let geometryVertex: CGPoint
let textureVertex: CGPoint
}
struct TexturedQuad {
let bottomLeft: TexturedVertex
let bottomRight: TexturedVertex
let topLeft: TexturedVertex
let topRight: TexturedVertex
}
Đó là một cấu trúc khá đơn giản, nhưng Tôi không biết làm thế nào để chuyển nó đến đối số cuối cùng của glVertexAttribPointer
. Bất kỳ sự giúp đỡ nào sẽ trở nên xuất sắc!
Tuyệt vời! Tôi cũng sẽ thêm vấn đề tiếp theo trong hướng dẫn này là phần lớn GLKit bị bẻ khóa trong Swift vì Swift thiếu 'union'. Mã bit này xung quanh vấn đề mặc dù https://github.com/programmingthomas/OpenGL.swift – jbrennan
Ngoài ra, yeah, 'CGPoint' không hoạt động vì các phao nổi quá lớn. Bạn phải sử dụng 32 bit 'GL_FLOAT'. – jbrennan