Tôi đang cố gắng vẽ một đường kẻ màu đen trên GLKitView
, sử dụng Swift
, nhưng nó không hoạt động. Tôi có thể xóa màn hình và tôi có thể tô màu bằng bất kỳ màu nào, nhưng tôi không thể vẽ bất kỳ thứ gì trên đó. Và tôi biết, câu hỏi này đã được hỏi rất nhiều lần, nhưng tôi không thể tìm thấy bất kỳ câu trả lời nào trên Swift. Hơn thế nữa, không có bất kỳ thông tin nào về việc sử dụng OpenGL ES với Swift, vì vậy tôi đã đến đây.Swift - Cách vẽ đường trong OpenGL ES?
Đây là mã của tôi:
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);
}
}
Tôi không chắc chắn những gì mã này làm gì, nguyên nhân OpenGL ES dường như điên cuồng, sau khi OpenGL bình thường. Ý tôi là, bạn cần phải viết rất nhiều mã chỉ để vẽ một dòng. Tại sao nó hoạt động theo cách đó?
Bạn sẽ cần lệnh gọi 'glVertexPointer()' mà bạn đã nhận xét. Nhưng sử dụng '0' làm đối số cuối cùng, vì đây là sự bù đắp vào bộ đệm nếu một bộ đệm bị ràng buộc. –
@RetoKoradi Tôi không thể sử dụng '0' làm đối số cuối cùng, bởi vì XCode nói 'Không thể gọi' init 'với một danh sách đối số của kiểu' (IntegerLiteralConvertible, $ T3, IntegerLiteralConvertible, IntegerLiteralConvertible) ''. Đối số cuối cùng là _Chỉ định một con trỏ tới tọa độ đầu tiên của đỉnh đầu tiên trong mảng_. Vì vậy, nó phải là một con trỏ đến phần tử đầu tiên của mảng. Nhưng làm thế nào để làm cho nó? –
Tôi đồng ý với OP, OpenGL-ES nhanh chóng là 'điên '. Tôi chỉ muốn vẽ một đường thẳng từ điểm A đến điểm B. Tại sao địa ngục lại cần 20 dòng mã gl? Tại sao không phải là một nguyên thủy? +1 cho 'insane' –