Sto provando a disegnare una linea singola nera su GLKitView
, utilizzando Swift
, ma non funziona. Posso cancellare lo schermo e posso riempirlo con qualsiasi colore, ma non posso disegnare nulla su di esso. E so che questa domanda è stata posta molte volte, ma non ho trovato alcuna risposta su Swift. Inoltre, non ci sono informazioni sull'utilizzo di OpenGL ES con Swift, quindi sono venuto qui.Swift - Come disegnare una linea in OpenGL ES?
Ecco il mio codice:
import GLKit
class MyGLKit: GLKView {
override func drawRect(rect: CGRect) {
glClearColor(0.8, 0.8, 0.8, 1.0)
glClear(GLbitfield(GL_COLOR_BUFFER_BIT))
glColor4f(0, 0, 0, 1)
var line: [GLfloat] = [-1, 0, 1, 0]
var len = line.count * sizeof(GLfloat)
// Create an handle for a buffer object array
var bufferObjectNameArray: GLuint = 0
// Have OpenGL generate a buffer name and store it in the buffer object array
glGenBuffers(1, &bufferObjectNameArray);
// Bind the buffer object array to the GL_ARRAY_BUFFER target buffer
glBindBuffer(GLbitfield(GL_ARRAY_BUFFER), bufferObjectNameArray);
// Send the line data over to the target buffer in GPU RAM
glBufferData(
GLbitfield(GL_ARRAY_BUFFER), // the target buffer
len, // the number of bytes to put into the buffer
line, // a pointer to the data being copied
GLbitfield(GL_STATIC_DRAW)); // the usage pattern of the data
glVertexPointer(2, GLbitfield(GL_FLOAT), 0, line);
var programHandle: GLuint = glCreateProgram()
glLinkProgram(programHandle)
glDrawArrays(GLbitfield(GL_LINES), 0, 2);
}
}
Non sono sicuro di ciò che questo codice facendo, causa OpenGL ES sembra follemente, dopo consueta OpenGL. Voglio dire, devi scrivere molto codice solo per disegnare una singola riga. Perché funziona in questo modo?
Avrete bisogno della chiamata 'glVertexPointer()' a cui avete commentato. Ma usa '0' come ultimo argomento, poiché questo è l'offset nel buffer se è associato un buffer. –
@RetoKoradi Non posso usare '0' come ultimo argomento, perché XCode dice' Impossibile richiamare 'init' con un elenco di argomenti di tipo '(IntegerLiteralConvertible, $ T3, IntegerLiteralConvertible, IntegerLiteralConvertible)' '. L'ultimo argomento è _Specifica un puntatore alla prima coordinata del primo vertice dell'array_. Quindi deve essere un puntatore al primo elemento dell'array. Ma come farlo? –
Sono d'accordo con OP, OpenGL-ES con swift è 'insano'. Voglio solo disegnare una maledetta linea dal punto A al punto B. Perché diavolo serve più di 20 linee di codice gl? Perché non è così primitivo? +1 per 'insane' –