5
我正在關注關於OpenGL/GLKit for iOS的this tutorial,但試圖在Swift中實現它。它會很好,直到我到了這個部分:如何將此OpenGL指針數學轉換爲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
我有一個屬性self.quad
這是一個斯威夫特結構是這樣的:
struct TexturedVertex {
let geometryVertex: CGPoint
let textureVertex: CGPoint
}
struct TexturedQuad {
let bottomLeft: TexturedVertex
let bottomRight: TexturedVertex
let topLeft: TexturedVertex
let topRight: TexturedVertex
}
這是一個相當簡單的結構,但我不知道如何將其傳遞給glVertexAttribPointer
的最後一個參數。任何幫助將是恆星!
非常好!我還會在教程中添加下一個問題,因爲Swift缺少'union',所以大部分GLKit都在Swift中被破壞。這段代碼解決了這個問題,雖然https://github.com/programmingthomas/OpenGL.swift – jbrennan
另外,是的,'CGPoint'不工作,因爲浮點數太大。你必須使用32位'GL_FLOAT'。 – jbrennan