gpt4 book ai didi

java - 我可以在 GL_POINTS 上使用 glScale 吗?

转载 作者:行者123 更新时间:2023-12-02 02:18:40 24 4
gpt4 key购买 nike

我正在lwjgl(opengl for java)中编写GUI框架。我最近通过渲染几个被圆圈包围的普通矩形来实现圆角矩形。为了渲染圆圈,我使用了 GL11.GL_POINTS。我现在已经达到了这样的地步,我正在尝试实现动画,对于窗口打开动画,我决定将 GL11.glScaled() 从小到正常。效果很好,但不幸的是我的圈子大小没有调整。

我尝试将 GL_POINTS 圆渲染方法更改为使用 TRIANGLE_FAN 的方法,效果很好。我的问题是,圆圈看起来一点也不光滑和圆,如果我增加渲染的三角形,它就会开始很快滞后。尽管我的电脑一点也不差。

这是我用来用 GL_POINTS 渲染圆的代码。

        GL11.glEnable(GL11.GL_POINT_SMOOTH);
GL11.glHint(GL11.GL_POINT_SMOOTH_HINT, GL11.GL_NICEST);
GL11.glPointSize(radius);
GL11.glBegin(GL11.GL_POINTS);
GL11.glVertex2d(x, y);
GL11.glEnd();
GL11.glDisable(GL11.GL_POINT_SMOOTH);

这是我用来缩放圆圈的代码

        GL11.glPushMatrix();
GL11.glTranslated(x, y, 0);
GL11.glScaled(2.0f, 2.0f, 1);
GL11.glTranslated(-x, -y, 0);
render circles
GL11.glPopMatrix();

我希望圆圈能够根据我放入 glScaled() 的数字进行缩放

目前它们根本没有重新缩放,只是以其正常大小呈现。

最佳答案

以下演示了如何使用三角形扇形正确渲染圆形:

public void render() {
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();
// Coordinate system starts out as screen space coordinates
glOrtho(0, 400, 300, 0, 1, -1);
glColor3d(1, 0.5, 0.5);
renderCircle(120, 120, 100);
glColor3d(0.5, 1, 0.5);
renderCircle(300, 200, 50);
glColor3d(0.5, 0.5, 1);
renderCircle(200, 250, 30);
}

private void renderCircle(double centerX, double centerY, double radius) {
glPushMatrix();
glTranslated(centerX, centerY, 0);
glScaled(radius, radius, 1);
// Another translation here would be wrong
renderUnitCircle();
glPopMatrix();
}

private void renderUnitCircle() {
glBegin(GL_TRIANGLE_FAN);
int numVertices = 100;
double angle = 2 * Math.PI / numVertices;
for (int i = 0; i < numVertices; ++i) {
glVertex2d(Math.cos(i*angle), Math.sin(i*angle));
}
glEnd();
}

输出图像:

Output image

GL_POINT_SIZE 值实际上是屏幕上点的大小(以像素为单位),而不是当前坐标单位。因此,您的圈子不受 GL_SCALE 的影响。这是不使用 GL_POINTS 渲染圆的原因之一。另一个(可以说更重要的)原因是 GL_POINT_SIZE 在较新的 OpenGL 配置文件中已被严重弃用且不受支持。

关于java - 我可以在 GL_POINTS 上使用 glScale 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57287858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com