Java 如何使用VBOs使用OpenGL(特别是LWJGL)绘制圆

Java 如何使用VBOs使用OpenGL(特别是LWJGL)绘制圆,java,lwjgl,Java,Lwjgl,我目前正在学习LWJGL(轻量级Java游戏库),OpenGL Java端口,并试图找出如何使用VBOs绘制圆 当我搜索与我的问题相关的代码示例时(我搜索OpenGL b/c,OpenGL和LWJGL的语法非常相似),我发现所有人都在使用glBegin(GL_QUADS)等等,这是我不喜欢的,因为它的性能差,功能不足。我知道它使用了类似于Math.PI之类的东西(我学过几何,我认为数学不是难的部分) 我想知道如何将使用Math.cos和Math.sin得到的X和Y值输入VBO,b/c当使用glD

我目前正在学习LWJGL(轻量级Java游戏库),OpenGL Java端口,并试图找出如何使用VBOs绘制圆

当我搜索与我的问题相关的代码示例时(我搜索OpenGL b/c,OpenGL和LWJGL的语法非常相似),我发现所有人都在使用
glBegin(GL_QUADS)
等等,这是我不喜欢的,因为它的性能差,功能不足。我知道它使用了类似于
Math.PI
之类的东西(我学过几何,我认为数学不是难的部分)


我想知道如何将使用
Math.cos
Math.sin
得到的X和Y值输入VBO,b/c当使用
glDrawArrays
时,必须指定顶点的数量。

您似乎混淆了很多。LWJGL和openGL实际上与此无关,您是否使用
glDrawArrays
glBegin
并不重要

LWJGL中没有
drawCircle
函数,您必须使用三角形绘制圆,如果您想更高效,三角形风扇更好

下面是我编写的一个方法,它为您提供了填充圆弧的垂直度(指定0和360表示
startingAngleDeg
endAngleDeg
表示整圆)

public static float[]getfilledArcVertex(float x、float y、float r、double startingAngleDeg、double endAngleDeg、int切片){
如果(起始角度度<0)
中暑。错误(“起始角度不能小于0”);
如果(端角度>=720)
中暑。错误(“端角不能大于或等于720”);
如果(endAngleDeg
这是我自己匆忙制作的一个非常糟糕的编码方法。在使用之前,请确保您了解它。然而,下面是它的工作原理:

  • 计算初始角度(仅在绘制圆弧时适用)
  • 循环从0到
    切片的每个数字,此参数是您希望圆具有的细节级别,越高意味着更多三角形,但一旦达到某个级别,将不会添加更多细节,只会占用cpu时间
  • 计算出以弧度为单位的角度
  • 使用
    Math.sin
    Math.cos
    计算圆外侧特定点的x和y值
  • 将适当的顶点添加到
    顶点
    数组中

  • 这将返回一个应该与
    GL_三角形一起使用的浮点数组
    ,您可以尝试将其改进为使用
    GL_三角形

    //您可以使用这个小的glBegin()代码并将其转换为VBO

    double k=0;
        glBegin(GL_POINTS);
        for(k=0;k<=360;k+=0.1){
        glVertex2f((float)(x+r*Math.cos(Math.toRadians(k))),(float)(y-r*Math.sin(Math.toRadians(k))));
        }
        glEnd();
    
    double k=0;
    glBegin(总分);
    
    对于(k=0;k
    Math.cos
    Math.sin
    不返回X和Y值。谢谢你的解释。我想我会弄混一些东西,因为我只学了大约2周。我确实知道它必须用三角形制作(我刚刚学会了三角形扇子是什么)。
    double k=0;
        glBegin(GL_POINTS);
        for(k=0;k<=360;k+=0.1){
        glVertex2f((float)(x+r*Math.cos(Math.toRadians(k))),(float)(y-r*Math.sin(Math.toRadians(k))));
        }
        glEnd();