美文网首页
改变gluOrtho2D()函数的参数,实现图形的伸缩。

改变gluOrtho2D()函数的参数,实现图形的伸缩。

作者: 嬴小政今天好好吃饭了吗 | 来源:发表于2018-12-02 18:44 被阅读0次

注:源代码参照《computer graphics with opengl》英文版第四版272页。
1、关键是如何控制gluOrtho2D()的参数

gluOrtho2D(-size, size, -size, size);

2、改变参数

GLint flag = 0;     //to control '+' or '-'
...
if (flag == 0)
        size++;
    else if (flag == 1)
        size--;
    if (size > 1000)
        flag = 1;
    if (size < 100)
        flag = 0;

3、完整代码

#include "pch.h"
#include <GL/glut.h>

GLfloat size = 100.0;
GLsizei size1 = 100, size2 = 100;
GLint flag = 0;     //to control '+' or '-'
class wcPt2D {
public:
    GLfloat x, y;
};

void init(void) {
    /* set color of display window to white */
    glClearColor(1.0, 1.0, 1.0, 1.0);
    gluOrtho2D(-size, size, -size, size);

    /*set parameters for world-cooridinate clipping window*/
    glMatrixMode(GL_PROJECTION);

    /*set mode for constructiong geometric transformation matrix*/
    glMatrixMode(GL_MODELVIEW);
}

void triangle(wcPt2D *verts) {
    GLint k;

    glBegin(GL_TRIANGLES);
    for (k = 0; k < 3; k++) {
        glVertex2f(verts[k].x, verts[k].y);
        }
    glEnd();
}

void changeSize() {
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (flag == 0)
        size++;
    else if (flag == 1)
        size--;
    if (size > 1000)
        flag = 1;
    if (size < 100)
        flag = 0;
    gluOrtho2D(-size, size, -size, size);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glutPostRedisplay();
}

void displayFcn(void) {
    /*define initial position for triangle*/
    wcPt2D verts[3] = {
        {-50.0,-25.0},
        {50.0,-25.0},
        {0.0,50.0}
    };

    /*clear diaplay window*/
    glClear(GL_COLOR_BUFFER_BIT);

    /*set fill color to blue*/
    glColor3f(0.0, 0.0, 1.0);

    /*set left viewport*/
    glViewport(0, 0, 300, 300);

    /*diplay triangle*/
    triangle(verts);

    /*rotate Triangle and display in right half of diaplay windows*/
    /*set fill color to red*/
    glColor3f(1.0, 0.0, 0.0);

    /*set rught viewport*/
    glViewport(300, 0, 300, 300);

    /*rotate about a z axis*/
    glRotatef(90.0, 0.0, 0.0, 1.0);

    /*display red rotated triangle */
    triangle(verts);

    glFlush();
}

void main(int argc,char ** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(50, 50);
    glutInitWindowSize(600, 300);
    glutCreateWindow("split-screen example");

    init();
    glutDisplayFunc(displayFcn);
    glutIdleFunc(changeSize);
    glutMainLoop();
}

4、实际效果


图一 图二

相关文章

  • 改变gluOrtho2D()函数的参数,实现图形的伸缩。

    注:源代码参照《computer graphics with opengl》英文版第四版272页。1、关键是如何控...

  • 关键字篇

    inout声明函数时,在参数前面用inout修饰,在函数内部实现改变外部参数,注意,这里只能传入变量,不能传入常量...

  • HTML笔记18:HTML5 SVG&地理位置

    一、SVG SVG是什么 可伸缩矢量图形 定义网络的基于矢量的图形 使用XML格式定义图形 在放大或改变尺寸的情况...

  • OpenGL 绘制第一个三角形

    1、导入头文件 2、定义全局变量 3、主函数实现 4、图形准备工作 5、视图尺寸改变时调用函数 6、开始渲染或改变...

  • 实现一个TextView中设置文字的不同颜色

    实现效果如图: SpannableString 构造函数的参数为你要改变的文本。setSpan方法有四个参数,Fo...

  • Swift函数

    函数定义 格式:func 函数名称(参数名:参数类型, 参数名:参数类型,...) -> 函数返回值 {函数实现部...

  • SVG矢量图打造不规则自定义控件

    概念:SVG指可伸缩矢量图形,使用 XML 格式定义图形, 图像在放大或改变尺寸的情况下其图形质量不会有所损失通常...

  • Swift函数

    概览函数定义隐式返回返回元组(实现多值返回)函数参数参数标签默认参数值可变参数输入输出参数函数重载内联函数函数类型...

  • 函数提高

    函数的默认参数 如果声明中有默认函数,那实现中就不能有默认参数 函数的占位参数 函数重载 函数名相同,提高复用性 ...

  • Python实现带额外参数的switch-case

    其中argument为进行switch case的参数,value为进行函数操作的参数函数操作由lambda函数实现

网友评论

      本文标题:改变gluOrtho2D()函数的参数,实现图形的伸缩。

      本文链接:https://www.haomeiwen.com/subject/yemrcqtx.html