OpenGL glDrawElements

时间:2016-10-23 16:12:00

标签: c++ opengl

给定一组Faces,每个面包含顶点数和指向矢量std :: Vector中顶点的指针,我想迭代所有面并使用glDrawElements绘制每个面:

编辑:我刚注意到我忘了激活vertex_array

// AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FIRApp.configure()
    return true
}

// ViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()
    FIRCrashMessage("A test message")
    fatalError()
}

// Run script in Build Phases that uploads symbol files
GOOGLE_APP_ID=our_google_app_id
"${PODS_ROOT}"/FirebaseCrash/upload-sym "serviceaccount.json"

// Podfile (using latest versions as of 2017-05-12, v3.17.0)
pod 'Firebase/Core'
pod 'Firebase/Crash'

但显然这不能正常工作,并且没有任何显示。

编辑:启用GL_VERTEX_ARRAY会在屏幕上绘制一些内容,但不会绘制我尝试创建的模型。因此,寻址似乎有问题。

1 个答案:

答案 0 :(得分:1)

您的索引数组没有意义。索引glDrawElements将仅使用您已设置的顶点数组 - 并且您正在为每个单独的多边形设置一个新数组。

这意味着

indices.push_back(f.vertices[i]);

应该在概念上只是

indices.push_back(i);

最后意味着您可以完全跳过索引并使用

glDrawArrays(GL_POLYGON,0,f.vcount);

请注意,您在此处所做的是渲染对象的非常无效的方法。如果你对整个对象使用单个绘图调用,你会好得多。您可以通过手动将多边形三角化为三角形作为预处理步骤来实现。