lwjgl为什么不绘制矩形?

时间:2019-10-13 09:52:09

标签: java opengl lwjgl

我想在lwjgl中绘制一个矩形。该代码应绘制一个矩形,但不是。我使用的是OpenGL 4.4(LWJGL不支持该功能)。
我主要是3d图形的初学者,因此,任何帮助将不胜感激。

import SwiftUI
import Combine

class TextBindingManager: ObservableObject {
    @Published var text = "" {
        didSet {
            if text.count > characterLimit && oldValue.count <= characterLimit {
                text = oldValue
            }
        }
    }
    let characterLimit = 5
}

struct ContentView: View {
    @ObservedObject var textBindingManager = TextBindingManager()

    var body: some View {
        TextField("Placeholder", text: $textBindingManager.text)
    }
}

当我删除索引并使用 float[] vertices= { 0.5f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, -0.5f, -0.5f, 0.0f, -0.5f, 0.5f, 0.0f }; float[] indices= { 0,1,2, 2,3,0 }; Shader vsh=new Shader("vertexShader.vsh",GL_VERTEX_SHADER); Shader fsh=new Shader("fragmentShader.fsh",GL_FRAGMENT_SHADER); sp=Shader.createProgram(vsh.shader,fsh.shader); int VBO,EBO; VAO=glGenVertexArrays(); VBO=glGenBuffers(); EBO=glGenBuffers(); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER,indices,GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0); glEnableVertexAttribArray(0); glBindVertexArray(0); glClearColor(1.0f,1.0f,1.0f,1.0f); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } void loop(){ while(!glfwWindowShouldClose(w.window)) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(sp); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6,GL_UNSIGNED_INT,0); glBindVertexArray(0); glfwSwapBuffers(w.window); glfwPollEvents(); } } void run() { init(); loop(); } public static void main(String[] args) { new Core().run(); } 而不是glDrawArrays时有效。

1 个答案:

答案 0 :(得分:1)

索引数组的类型必须为int,而不是float

float[] indices =
int [] indices =

元素数组缓冲区中的数据类型必须与调用glDrawElements时指定的数据类型匹配。

  
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT,0);

指定的类型必须是GL_UNSIGNED_BYTEGL_UNSIGNED_SHORTGL_UNSIGNED_INT中的一种。 Java中相应的数据类型分别为byteshort int