我可以在 GL_POINTS 上使用 glScale 吗?
Can I use glScale on GL_POINTS?
我正在用 lwjgl(java 的 opengl)编写 GUI 框架。我最近通过渲染几个被圆圈包围的普通矩形来实现圆角矩形。为了渲染我使用 GL11.GL_POINTS 的圆圈。我现在达到了我正在尝试实现动画的地步,并且对于 window 打开动画,我决定 GL11.glScaled() 它从小到正常。效果很好,但不幸的是我的圈子没有调整大小。
我尝试将我的 GL_POINTS 圆形渲染方法更改为使用 TRIANGLE_FANs 的方法,并且效果很好。我的问题是,圆圈看起来一点也不光滑和圆润,如果我增加渲染的三角形,它就会开始非常快地滞后。虽然我的电脑一点都不差
这是我用 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();
}
输出图像:
GL_POINT_SIZE 值实际上是屏幕上 像素 中点的大小,而不是当前坐标单位。因此,您的圈子未受到 GL_SCALE 的影响。这是不使用 GL_POINTS 来渲染圆圈的原因之一。另一个(可以说是更重要的)原因是 GL_POINT_SIZE 在较新的 OpenGL 配置文件中被严重弃用并且不受支持。
我正在用 lwjgl(java 的 opengl)编写 GUI 框架。我最近通过渲染几个被圆圈包围的普通矩形来实现圆角矩形。为了渲染我使用 GL11.GL_POINTS 的圆圈。我现在达到了我正在尝试实现动画的地步,并且对于 window 打开动画,我决定 GL11.glScaled() 它从小到正常。效果很好,但不幸的是我的圈子没有调整大小。
我尝试将我的 GL_POINTS 圆形渲染方法更改为使用 TRIANGLE_FANs 的方法,并且效果很好。我的问题是,圆圈看起来一点也不光滑和圆润,如果我增加渲染的三角形,它就会开始非常快地滞后。虽然我的电脑一点都不差
这是我用 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();
}
输出图像:
GL_POINT_SIZE 值实际上是屏幕上 像素 中点的大小,而不是当前坐标单位。因此,您的圈子未受到 GL_SCALE 的影响。这是不使用 GL_POINTS 来渲染圆圈的原因之一。另一个(可以说是更重要的)原因是 GL_POINT_SIZE 在较新的 OpenGL 配置文件中被严重弃用并且不受支持。