我需要迭代绘制多边形。例如,我想绘制一个带有8个角的多边形。我需要用GL_LINES
绘制第一行,然后画第二条线,它们之间长度相同,角度为135°
,第三条线也有第二条线的角度135°
等。 我想制作一个循环来渲染它,但我不知道如何。我有一个方法,但它不能正常工作。OpenGL使用GL_LINES绘制多边形和线条之间的夹角
第二点线n-1
应该是第一点n
等等...... 最后,我需要得到一个闭合的多边形。最后一行的最后一点应该是第一行的第一个点。
我需要迭代绘制多边形。例如,我想绘制一个带有8个角的多边形。我需要用GL_LINES
绘制第一行,然后画第二条线,它们之间长度相同,角度为135°
,第三条线也有第二条线的角度135°
等。 我想制作一个循环来渲染它,但我不知道如何。我有一个方法,但它不能正常工作。OpenGL使用GL_LINES绘制多边形和线条之间的夹角
第二点线n-1
应该是第一点n
等等...... 最后,我需要得到一个闭合的多边形。最后一行的最后一点应该是第一行的第一个点。
使用GL_LINE_LOOP
,将在您的最后一个顶点自动连接到你的第一个:
#include <GL/glut.h>
#include <cmath>
void glPolygon(unsigned int sides)
{
if(sides < 3) return;
const float PI = 3.14159;
const float step = (2 * PI)/static_cast<float>(sides);
glBegin(GL_LINE_LOOP);
for(unsigned int i = 0; i < sides; ++i)
{
glVertex2f(cos(i * step), sin(i * step));
}
glEnd();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double ar = glutGet(GLUT_WINDOW_WIDTH)/(double)glutGet(GLUT_WINDOW_HEIGHT);
glOrtho(-2 * ar, 2 * ar, -2, 2, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3ub(255, 0, 0);
glPolygon(8);
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(640, 480);
glutCreateWindow("Polygons");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
如果你在GL_LINES
死心塌地这个工程:
void glPolygonLines(unsigned int sides)
{
if(sides < 3) return;
const float PI = 3.14159f;
const float step = (2 * PI)/static_cast<float>(sides);
glBegin(GL_LINES);
for(unsigned int i = 0; i < sides; ++i)
{
unsigned int cur = (i + 0) % sides;
unsigned int nxt = (i + 1) % sides;
glVertex2f(cos(cur * step), sin(cur * step));
glVertex2f(cos(nxt * step), sin(nxt * step));
}
glEnd();
}
“我有一个办法,但它不能正常工作。“......发布你的东西。 – genpfault