首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单的openGL绘图程序没有输出?

简单的openGL绘图程序没有输出?
EN

Stack Overflow用户
提问于 2018-01-20 15:39:39
回答 1查看 285关注 0票数 1

我无法理解为什么我没有得到任何输出的给定程序。这个问题发生在我最近的两个openGL程序中,前一个是DDA算法,在这个算法中我没有得到任何输出。该算法是否存在问题,或者在我的理解中,openGL是如何内部工作的?

代码语言:javascript
运行
复制
#include <iostream>
#include <GL/glut.h>
using namespace std;
float X1 = 0, X2 = 100, Y1 = 0, Y2 = 400, X11, Y11, X22, Y22, slope, dely, delx, c, intercept, pi;
float absl(float x) {
    if (x >= 0) return x;
    return -1*x;
}
void drawScene() {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, 500, 0, 500);
    glClearColor(1.0, 1.0, 1.0, 0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 0.0, 0.0);
    //start bresenham algo
    glBegin(GL_POINTS);
        glVertex2f(X1, Y1);
        while(X1 <= X2) {
            X1++;
            if(pi < 0) {
                glVertex2f(X1, Y1);
            }
            else {
                Y1++;
                glVertex2f(X1, Y1);
            }
            float flag = (pi >= 0);
            pi = pi + 2*dely - 2*delx*flag;
        }
    glEnd();
    //end DDA algo
    glFlush();
}

int main(int argc, char **argv) {
    //cin >> X1 >> Y1 >> X2 >> Y2;
    // dely = Y2 - Y1;
    // delx = X2 - X1;
    // pi = 2*dely - delx;
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(0,0);
    glutCreateWindow("DDA");
    glutDisplayFunc(drawScene);
    glutMainLoop();
    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-20 16:16:20

gluOrtho2D定义了二维正交投影矩阵。同时,它还将矩阵栈上的电流矩阵与正交投影矩阵相乘,用乘积代替当前矩阵。

注意,在OpenGL固定函数管道中,所有矩阵操作都是这样工作的(除了glPushMatrixglPopMatrixglLoadMatrixglLoadIdentity)。

这意味着您必须用恒等矩阵(glLoadIdentity)替换当前矩阵,然后应用正交投影矩阵:

代码语言:javascript
运行
复制
glLoadIdentity();
gluOrtho2D(0, 500, 0, 500);

或者,在启动main函数的主循环之前,只执行一次gluOrtho2D

代码语言:javascript
运行
复制
gluOrtho2D(0, 500, 0, 500);
glutMainLoop();

由于显示函数是连续调用的(drawScene),所以您应该使用本地控制变量,而不是修改X1Y1

代码语言:javascript
运行
复制
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 500, 0, 500);
glClearColor(0.0, 0.0, 0.0, 0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
//start bresenham algo
int x = X1, y = Y1;
glBegin(GL_LINES);
glVertex2f(100, 400);
glVertex2f(400, 100);
glEnd();
glBegin(GL_POINTS);
    glVertex2f(x, Y1);
    while(x <= X2) {
        x ++;
        if(pi < 0) {
            glVertex2f(x, y);
        }
        else {
            y ++
            glVertex2f(x, y);
        }
    }
    int flag = (pi >= 0);
    pi = pi + 2*dely - 2*delx*flag;
glEnd();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48357929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档