Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何用freeglut绘制菱形?_C++_Opengl_Freeglut_Opengl Compat - Fatal编程技术网

C++ 如何用freeglut绘制菱形?

C++ 如何用freeglut绘制菱形?,c++,opengl,freeglut,opengl-compat,C++,Opengl,Freeglut,Opengl Compat,我正在尝试使用OpenGL绘制类似于此的目标输出图像。我正在使用freeglut。我可以画三个多边形,但我不知道如何正确定位这三个多边形。下面我附上了目标输出和正确输出 #包括 void init(void) { glClearColor(1.0,1.0,1.0,0.0); glMatrixMode(GL_投影); gluOrtho2D(-5.0,5.0,-5.0,5.0); glMatrixMode(GLU模型视图); } void drawSquare(void) { glBegin(GL

我正在尝试使用OpenGL绘制类似于此的目标输出图像。我正在使用freeglut。我可以画三个多边形,但我不知道如何正确定位这三个多边形。下面我附上了目标输出和正确输出

#包括
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_投影);
gluOrtho2D(-5.0,5.0,-5.0,5.0);
glMatrixMode(GLU模型视图);
}
void drawSquare(void)
{
glBegin(GL_多边形);
glVertex2f(0.0f,-1.0f);
glVertex2f(2.0f,0.0f);
glVertex2f(0.0f,1.0f);
glVertex2f(-2.0f,0.0f);
格伦德();
}
作废myDraw1(作废)
{
glClear(GLU颜色缓冲位);
glLoadIdentity();
GL3F(1.0,0.0,0.0);
drawSquare();
glTranslatef(2.0,3.0,0.0);
glRotatef(30,0.0,0.0,1.0);
GL3F(0.0,1.0,0.0);
drawSquare();
glLoadIdentity();
glTranslatef(-2.0,-3.0,0.0);
glRotatef(-30,0.0,0.0,1.0);
GL3F(0.0,0.0,1.0);
drawSquare();
glFlush();
}
作废myDraw2(作废)
{
glClear(GLU颜色缓冲位);
glLoadIdentity();
GL3F(1.0,0.0,0.0);
drawSquare();
glPushMatrix();
glTranslatef(2.0,3.0,0.0);
glRotatef(30,0.0,0.0,1.0);
GL3F(0.0,1.0,0.0);
drawSquare();
glPopMatrix();
glTranslatef(-2.0,-3.0,0.0);
glRotatef(-30,0.0,0.0,1.0);
GL3F(0.0,0.0,1.0);
drawSquare();
glFlush();
}
void main(整型argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(0,0);
glutInitWindowSize(600600);
旋转窗口(“旋转”);
init();
glutDisplayFunc(myDraw1);
glutMainLoop();
}

多边形之间的角度为120°。多边形的中心是(0,0)。必须围绕点(-2,0)旋转。以(-2,0)移动到(0,0)的方式平移多边形并旋转多边形:

glRotatef(120.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
注意,像和这样的操作指定一个矩阵,并将当前矩阵乘以新指定的矩阵。用于保存和还原矩阵(按入并从矩阵堆栈中弹出)

e、 g:

void myDraw1(void)
{
glClear(GLU颜色缓冲位);
glLoadIdentity();
GL3F(1.0,0.0,0.0);
glPushMatrix();
glRotatef(90.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
drawSquare();
glPopMatrix();
GL3F(0.0,1.0,0.0);
glPushMatrix();
glRotatef(210.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
drawSquare();
glPopMatrix();
GL3F(0.0,0.0,1.0);
glPushMatrix();
glRotatef(330.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
drawSquare();
glPopMatrix();
glFlush();
}

多边形之间的角度为120°。多边形的中心是(0,0)。必须围绕点(-2,0)旋转。以(-2,0)移动到(0,0)的方式平移多边形并旋转多边形:

glRotatef(120.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
注意,像和这样的操作指定一个矩阵,并将当前矩阵乘以新指定的矩阵。用于保存和还原矩阵(按入并从矩阵堆栈中弹出)

e、 g:

void myDraw1(void)
{
glClear(GLU颜色缓冲位);
glLoadIdentity();
GL3F(1.0,0.0,0.0);
glPushMatrix();
glRotatef(90.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
drawSquare();
glPopMatrix();
GL3F(0.0,1.0,0.0);
glPushMatrix();
glRotatef(210.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
drawSquare();
glPopMatrix();
GL3F(0.0,0.0,1.0);
glPushMatrix();
glRotatef(330.0,0.0,0.0,1.0);
glTranslatef(2.0,0.0,0.0);
drawSquare();
glPopMatrix();
glFlush();
}
#include <GL/glut.h>

void init(void)
{
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(-5.0, 5.0, -5.0, 5.0);
    glMatrixMode(GL_MODELVIEW);
}

void drawSquare(void)
{
    glBegin(GL_POLYGON);
    glVertex2f(0.0f, -1.0f);
    glVertex2f(2.0f, 0.0f);
    glVertex2f(0.0f, 1.0f);
    glVertex2f(-2.0f, 0.0f);
    glEnd();
}

void myDraw1(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    glColor3f(1.0, 0.0, 0.0);
    drawSquare();
    glTranslatef(2.0, 3.0, 0.0);
    glRotatef(30, 0.0, 0.0, 1.0);
    glColor3f(0.0, 1.0, 0.0);
    drawSquare();
    glLoadIdentity();
    glTranslatef(-2.0, -3.0, 0.0);
    glRotatef(-30, 0.0, 0.0, 1.0);
    glColor3f(0.0, 0.0, 1.0);
    drawSquare();
    glFlush();
}

void myDraw2(void)
{
    glClear(GL_COLOR_BUFFER_BIT);    
    glLoadIdentity();
    glColor3f(1.0, 0.0, 0.0);
    drawSquare();
    glPushMatrix();
    glTranslatef(2.0, 3.0, 0.0);
    glRotatef(30, 0.0, 0.0, 1.0);
    glColor3f(0.0, 1.0, 0.0);
    drawSquare();
    glPopMatrix();
    glTranslatef(-2.0, -3.0, 0.0);
    glRotatef(-30, 0.0, 0.0, 1.0);
    glColor3f(0.0, 0.0, 1.0);
    drawSquare();
    glFlush();
}

void main(int argc, char** argv)

{

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(600, 600);
    glutCreateWindow("Rotate");
    init();
    glutDisplayFunc(myDraw1);
    glutMainLoop();
}