Ich versuche, eine schwarze einzelne Linie auf GLKitView
, mit zu zeichnen, aber es funktioniert nicht. Ich kann Bildschirm löschen und ich kann es mit jeder Farbe füllen, aber ich kann nichts darauf zeichnen. Und ich weiß, diese Frage wurde oft gestellt, aber ich konnte auf Swift keine Antwort finden. Mehr darüber, es gibt keine Informationen über die Verwendung von OpenGL ES mit Swift, also kam ich hierher.Swift - Wie zeichne Linie in OpenGL ES?
Hier ist mein Code:
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);
}
}
Ich bin nicht sicher, was dieser Code tut, weil OpenGL ES irrsinnig scheint, nach der üblichen OpenGL. Ich meine, Sie müssen viel Code schreiben, nur um eine einzelne Zeile zu zeichnen. Warum funktioniert das so?
Sie benötigen den Aufruf 'glVertexPointer()', den Sie auskommentiert haben. Aber verwenden Sie '0' als letztes Argument, da dies der Offset in den Puffer ist, wenn ein Puffer gebunden ist. –
@RetoKoradi Ich kann '0' nicht als letztes Argument verwenden, weil XCode sagt' Kann nicht 'init' mit einer Argumentliste vom Typ '(IntegerLiteralConvertible, $ T3, IntegerLiteralConvertible, IntegerLiteralConvertible)' aufrufen. Das letzte Argument ist _Spezifiziert einen Zeiger auf die erste Koordinate des ersten Eckpunkts im Array_. Es muss also ein Zeiger auf das erste Element des Arrays sein. Aber wie schafft man es? –
Ich stimme mit OP, OpenGL-ES mit swift ist "verrückt". Ich möchte nur eine verdammte Linie von Punkt A nach Punkt B zeichnen. Warum zur Hölle braucht das mehr als 20 Zeilen gl-Code? Warum ist das nicht ein Primitiv? +1 für 'wahnsinnig ' –