【问题标题】:Draw a triangle with OpenGL用OpenGL画一个三角形
【发布时间】:2017-04-19 20:43:32
【问题描述】:

编写一个 C++ 程序,该程序将绘制一个顶点位于 (300,210) 的三角形, (340,215) 和 (320,250)。三角形的中心位于 (320,240)。

#include <GL/glut.h>
#include <stdlib.h>

void display(void)
{
    glClearColor(1,1,0,0);

    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);

    glColor3f(0.5,0,0);

    glVertex2f(300.0,210.0);
    glVertex2f(340.0,215.0);
    glVertex2f(320.0,250.0);

    glEnd();

    glFlush();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,500);
    glutInitWindowPosition(1,1);

    glutCreateWindow("Triangle");

    glutDisplayFunc(display);


    glutMainLoop();

    return EXIT_SUCCESS;
}

问题三角形未出现,仅出现黄色屏幕。

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    您的程序需要适当的视图/投影矩阵。 glOrtho(0, 640, 480, 0, -1, 1) 应该可以解决问题。理想情况下,应该将MatrixMode 设置为GL_PROJECTION 来调用它。

    【讨论】:

    • int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitWindowSize(640,500); glutInitWindowPosition(1,1); glMatrixMode(GL_PROJECTION); glOrtho(0, 640, 480, 0,-1, 1); glutCreateWindow("三角形");过剩显示函数(显示);过剩主循环();返回 EXIT_SUCCESS; }
    • glMatrixMode(GL_PROJECTION); gluOrtho2D(0,400,0,500);
    【解决方案2】:

    OpenGL 中的坐标系是从 -1 -> 1。您必须从所需的像素值转换坐标。

    这可以通过一些线性插值来完成。像这样的东西应该可以工作:

    float c = -1.0 + 2.0*desiredPixel/pixelWidth
    

    您需要对所有三角形坐标进行此转换。

    【讨论】:

    • 那是低效的
    【解决方案3】:

    下面是一个简单有效的三角码:

    glBegin(GL_TRIANGLES);
    glColor3f(0.1, 0.2, 0.3);
    glVertex3f(0, 0, 0);
    glVertex3f(1, 0, 0);
    glVertex3f(0, 1, 0);
    glEnd();
    

    【讨论】:

    • 我切换到 glvertex2i 并使用了 'glMatrixMode(GL_PROJECTION); gluOrtho2D(0,400,0,500);'
    【解决方案4】:
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0,400,0,500);
    

    这主要解决了我的问题,我认为 3D 透视不起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 2021-06-11
      相关资源
      最近更新 更多