分类: 【开发技术】OpenGL 2012-01-18 14:59 5217人阅读 评论(0) 收藏 举报

//

//  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;

}

第一课、OpenGL绘制直线等等的更多相关文章

  1. 第一课 opengl简介

    1. 什么是opengl: opengl是图形硬件的一种软件接口. 2. opengl对场景中的图像进行渲染时所执行的主要图形操作 1)根据几何图元创建形状,从而建立物体的数学描述. 2)在三维空间中 ...

  2. NeHe OpenGL教程 第一课:OpenGL窗口

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. Opengl绘制我们的小屋(二)第一人称漫游

    这章我们先讲第一人称漫游的实现.在openTK里,我们用函数Matrix4.LookAt(caram.Eye,caram.Target,Vector3.UnitY)来放置摄像机,其中三个参数分别与摄像 ...

  4. Android OpenGL教程-第一课【转】

    第一课 快速的开始一个Android OpenGL项目 首先,读懂我们的教程,需要有android的初步基础,我们这里只是通过android提供的SDK,来进行OpenGL的学习,所以你必须先学习如何 ...

  5. OpenGL学习进程(4)第二课:绘制图形

    本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形:     (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) ...

  6. Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)

       原文英文地址为:Creating an OpenGL Window (Win32),翻译的chm中文格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,每 ...

  7. 【OpenGL学习】 四种绘制直线的算法

    我是用MFC框架进行测试的,由于本人也没有专门系统学习MFC框架,代码若有不足之处,请指出. 一,先来一个最简单的DDA算法 DDA算法全称为数值微分法,基于微分方程来绘制直线. ①推导微分方程如下: ...

  8. OpenGl 绘制一个立方体

    OpenGl 绘制一个立方体 为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定6*4=24个顶点.但是我们知道,一个立方体其实总共只有八个顶点,要指定24次,就意味着每个顶点其实重复 ...

  9. 第10课 OpenGL 3D世界

    加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...

随机推荐

  1. Filebeat+ELK

    Filebeat+ELK filebeat是logstash的升级版,从功能上来说肯定不如logstash,但是logstah比较耗费资源: filebeat安装 暂时依托于window系统 下载fi ...

  2. 替代或者与 Redis 配合存储十亿级别列表的数据.

    http://ssdb.io/docs/zh_cn/index.html 用户案例 如果你在生产环境中使用 SSDB, 欢迎你给我发邮件(ssdb#udpwork.com), 我很愿意把你加入到下面的 ...

  3. django mysql setting 设置

    django mysql setting  django mysql 设置 DATABASES = {    'default': {        'ENGINE': 'django.db.back ...

  4. 查看物料凭证MB03 /MIGO A04-显示,R02-物料凭证

    当货物移动操作后,可以使用事物码MB03.MIGO查询最近一次生成的物料凭证, 如果未知凭证号,Table:MKPF / AUFM/EKBE MKPF 抬头:物料凭证 KEY: MBLNR 物料凭证编 ...

  5. 开发的第一个PHP扩展

    下载php源码php-5.4.23.tar.gz,解压,进入/home/hubo/php-5.4.23/ext/扩展目录 wget http://cn2.php.net/get/php-5.4.23. ...

  6. python优缺点小结

    优点:  1.语言简洁优美 例如去除了大括号,写法简单,写法更接近于英语,其他语言几十上百行的代码,十来行就能解决,而且还好看 2.跨平台,window.linux.mac通用 3.排行高,社区完善 ...

  7. Linux桥接网络配置

    在虚拟机网络配置中,选择桥接的方式.然后进入linux进行设置. 编辑 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPR ...

  8. Zookeeper原理与Curator使用

    近期打算实现一个基于Zookeeper的分布式的集群状态一致性控制, 对Zookeeper的原理不太了解, 正好学习一下, 网上找到了几篇文章, 先贴在这边, 等我熟读官方文档后, 再来补充自己的见解 ...

  9. Hadoop- 集群时间同步

    集群的时间要同步 * 找一台机器 时间服务器 * 所有的机器与这台机器时间进行定时的同步 比如,每日十分钟,同步一次时间 # rpm -qa|grep ntp # vi /etc/ntp.conf # ...

  10. 使用gdb调试c/c++代码

    转自 http://blog.csdn.net/haoel/article/details/2879 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较 ...