zoukankan      html  css  js  c++  java
  • 第一课、OpenGL绘制直线等等

    第一课、OpenGL绘制直线等等

    分类: 【开发技术】OpenGL

    //

    //  main.c

    //  opengl_ animationRect_0002

    //

    //  Created by  ch_soft on 12-1-16.

    //  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.

    //


    #include<stdio.h>

    #include<GLUT/glut.h>

    #include<OpenGL/gl.h> 

    #include<OpenGL/glu.h>




    //用于绘制窗口需要的图形

    void RenderScene()

    {

        //清除颜色缓冲区,即窗口的背景色

       glClear(GL_COLOR_BUFFER_BIT);

        

        //设置当前绘图使用的颜色

      glColor3f(0.0f,0.0f, 0.0f);

        

        //使用当前的颜色来绘制一个矩形

    //    glRectf(100.0f, 150.0f, 150.0f, 100.0f);

        

    //   1.画点

        GLfloat sizesPoint[2];//保存线宽的尺寸范围

        GLfloat stepPoint;//保存线宽度尺寸的最小间隔

        GLfloat curSizePoint;

        

       glGetFloatv(GL_POINT_SIZE_RANGE,sizesPoint);

       glGetFloatv(GL_POINT_SIZE_GRANULARITY,&stepPoint); 

        curSizePoint=sizesPoint[0];

        for (int i=0;i<25;i++) {

            glPointSize(curSizePoint); 

            glBegin(GL_POINTS);

            glVertex3f(25.0+i*8,200.0f,0.0f); 

            glEnd();

            curSizePoint +=stepPoint*2;

        }

        

        

    //  2. 画直线

        

    //    GLfloat sizesLine[2];//保存线宽的尺寸范围

    //    GLfloat stepLine;//保存线宽度尺寸的最小间隔

        GLfloat curSizeLine=5;

    //    glGetFloatv(GL_LINE_WIDTH_RANGE,sizesLine);

    //    glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&stepLine);

        glLineWidth(curSizeLine); 

       glBegin(GL_LINES);

       glVertex3f(25.0f,160.0f,0.0f);

       glVertex3f(225.0f,160.0f,0.0f); 

        

        glEnd();

        

    //   3.画连续的直线

       glBegin(GL_LINE_STRIP);

       glVertex3f(25.0f,150.0f,0.0f);

       glVertex3f(100.0f,150.0f,0.0f); 

       glVertex3f(100.0f,130.0f,0.0f);

        glEnd();

        

       glBegin(GL_LINE_STRIP);

       glVertex3f(0.0f,0.0f,0.0f);

       glVertex3f(10.0f,10.0f,0.0f);

       glVertex3f(20.0f,5.0f,0.0f);

        glEnd();

        

    //   4.画封闭式直线

       glBegin(GL_LINE_LOOP);

       glVertex3f(125.0f,150.0f,0.0f);

       glVertex3f(200.0f,150.0f,0.0f); 

       glVertex3f(200.0f,130.0f,0.0f);

        glEnd();

        

    //   画虚线

       glEnable(GL_LINE_STIPPLE); 

        glLineStipple(1,0x00FF);//第一个参数是倍数,第二个参数是一个十六进制数,用来表示如何显示的

       glBegin(GL_LINES);

       glVertex3f(25.0f,120.0f,0.0f);

       glVertex3f(225.0f,120.0f,0.0f); 

        glEnd();

        

        

       glLineWidth(3);

       glLineStipple(1,0xFF0C); 

       glBegin(GL_LINES);

       glVertex3f(25.0f,80.0f,0.0f);

       glVertex3f(225.0f,80.0f,0.0f);

        glEnd();

        

        

       glLineStipple(4,0xFF0C); 

       glBegin(GL_LINES);

       glVertex3f(25.0f,40.0f,0.0f);

       glVertex3f(225.0f,40.0f,0.0f); 

        glEnd();

       glDisable(GL_LINE_STIPPLE);

       //刷新opengl命令队列

        glFlush();

    }


    //改变大小时调用的函数

    void ChangeSize(GLsizei w,GLsizei h)

    {

        if (h==0) {

            h=1;

        }

       //设置视区尺寸

        glViewport(0, 0, w, h);

        //重置坐标系统,使用投影变换复位

       glMatrixMode(GL_PROJECTION);

       glLoadIdentity();

        

        if (w<=h) {

           glOrtho (0.0f,250.0f, 0.0f,250.0f*h/w, 1.0f, -1.0f);

        }else

        {

           glOrtho (0.0f,250.0f*w/h, 0.0f,250.0f, 1.0f, -1.0f);

        }

       glMatrixMode(GL_MODELVIEW);

       glLoadIdentity();

    }

    //用于初始化,常用来设置场景的渲染状态

    void SetupRC(void)

    {

       glClearColor(1.0f,1.0f, 1.0f,1.0f);

    }



    int main(int argc,char** argv)

    {

       //    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

       //    glutCreateWindow("GLRect");

        

        glutInit(&argc, argv);

       //初始化GLUT库OpenGL窗口的显示模式

       glutInitDisplayMode (GLUT_SINGLE |GLUT_RGB |GLUT_DEPTH);

       glutInitWindowSize (500,500); 

       glutInitWindowPosition (100,100);

       glutCreateWindow (argv[0]);

        

        

       glutDisplayFunc(RenderScene);

       glutReshapeFunc(ChangeSize);

        

        SetupRC();

       glutMainLoop();

        

        return 0;

    }

  • 相关阅读:
    python装饰器的作用
    python的__call__、__str__、__repr__、__init__、__class__、__name___、__all__、__doc__、__del__等魔术方法的作用
    安全小测试:介绍一个简单web安全知识测试的网站
    浏览器都知道我们的哪些信息?
    SQL开发技巧(二)
    如何解决SQLServer占CPU100%
    记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
    如何在SQLServer中处理每天四亿三千万记录
    SqlServer索引的原理与应用
    T-sql语句查询执行顺序
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/4361605.html
Copyright © 2011-2022 走看看