Java 如何使用VBOs使用OpenGL(特别是LWJGL)绘制圆
我目前正在学习LWJGL(轻量级Java游戏库),OpenGL Java端口,并试图找出如何使用VBOs绘制圆 当我搜索与我的问题相关的代码示例时(我搜索OpenGL b/c,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
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
这是我自己匆忙制作的一个非常糟糕的编码方法。在使用之前,请确保您了解它。然而,下面是它的工作原理:
切片的每个数字,此参数是您希望圆具有的细节级别,越高意味着更多三角形,但一旦达到某个级别,将不会添加更多细节,只会占用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;kMath.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();