Próbuję narysować czarną pojedynczą linię na GLKitView
, używając Swift
, ale to nie działa. Mogę wyczyścić ekran i mogę go wypełnić dowolnym kolorem, ale nie mogę niczego na nim narysować. I wiem, że to pytanie było zadawane wiele razy, ale nie mogłem znaleźć żadnej odpowiedzi na temat Swift. Co więcej, nie ma żadnych informacji o używaniu OpenGL ES z Swift, więc przyszedłem tutaj.Swift - Jak narysować linię w OpenGL ES?
Oto mój kod:
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);
}
}
Nie jestem pewien, co ten kod robi, bo OpenGL ES wydaje się szalenie, po zwykłej OpenGL. Trzeba napisać dużo kodu, aby narysować pojedynczą linię. Dlaczego to działa w ten sposób?
Będziesz potrzebować wywołania "glVertexPointer()", które skomentowałeś. Ale używaj '0' jako ostatniego argumentu, ponieważ jest to przesunięcie do bufora, jeśli bufor jest powiązany. –
@RetoKoradi Nie mogę użyć '0' jako ostatniego argumentu, ponieważ XCode mówi' Nie można wywołać 'init' z listą argumentów typu '(IntegerLiteralConvertible, $ T3, IntegerLiteralConvertible, IntegerLiteralConvertible) ''. Ostatni argument to _Specyfikuje wskaźnik do pierwszej współrzędnej pierwszego wierzchołka w tablicy. Musi więc być wskaźnikiem do pierwszego elementu tablicy. Ale jak to zrobić? –
Zgadzam się z OP, OpenGL-ES z Swift jest "obłąkany". Chcę tylko narysować cholerną linię od punktu A do punktu B. Dlaczego, do cholery, potrzeba tego ponad 20 linii kodu? Dlaczego nie jest to prymitywne? +1 dla "obłąkanego" –