मैं आईओएस के लिए ओपनजीएल/जीएलकिट के बारे में this tutorial का पालन कर रहा हूं लेकिन इसे स्विफ्ट में कार्यान्वित करने की कोशिश कर रहा हूं। जब तक मैं इस हिस्से के लिए मिलता है यह ठीक हो रहा है:मैं इस ओपनजीएल पॉइंटर गणित को स्विफ्ट में कैसे परिवर्तित करूं?
- (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 इस तरह है:
struct TexturedVertex {
let geometryVertex: CGPoint
let textureVertex: CGPoint
}
struct TexturedQuad {
let bottomLeft: TexturedVertex
let bottomRight: TexturedVertex
let topLeft: TexturedVertex
let topRight: TexturedVertex
}
यह एक काफी सरल संरचना है, लेकिन मैं पता नहीं कैसे glVertexAttribPointer
के अंतिम तर्क को पास करने के लिए। कोई मदद तारकीय होगा!
उत्कृष्ट! मैं ट्यूटोरियल में अगली समस्या भी जोड़ूंगा, अधिकांश जीएलकिट स्विफ्ट में फंस गया है क्योंकि स्विफ्ट में 'यूनियन' की कमी है। कोड का यह बिट समस्या के आसपास आता है हालांकि https://github.com/programmingthomas/OpenGL.swift – jbrennan
इसके अलावा, हाँ, 'CGPoint' काम नहीं करता है क्योंकि फ्लोट बहुत बड़ी हैं। आपको 32 बिट 'GL_FLOAT' का उपयोग करना होगा। – jbrennan