第一课、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;
}
第一课、OpenGL绘制直线等等的更多相关文章
- 第一课 opengl简介
1. 什么是opengl: opengl是图形硬件的一种软件接口. 2. opengl对场景中的图像进行渲染时所执行的主要图形操作 1)根据几何图元创建形状,从而建立物体的数学描述. 2)在三维空间中 ...
- NeHe OpenGL教程 第一课:OpenGL窗口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Opengl绘制我们的小屋(二)第一人称漫游
这章我们先讲第一人称漫游的实现.在openTK里,我们用函数Matrix4.LookAt(caram.Eye,caram.Target,Vector3.UnitY)来放置摄像机,其中三个参数分别与摄像 ...
- Android OpenGL教程-第一课【转】
第一课 快速的开始一个Android OpenGL项目 首先,读懂我们的教程,需要有android的初步基础,我们这里只是通过android提供的SDK,来进行OpenGL的学习,所以你必须先学习如何 ...
- OpenGL学习进程(4)第二课:绘制图形
本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形: (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) ...
- Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
原文英文地址为:Creating an OpenGL Window (Win32),翻译的chm中文格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,每 ...
- 【OpenGL学习】 四种绘制直线的算法
我是用MFC框架进行测试的,由于本人也没有专门系统学习MFC框架,代码若有不足之处,请指出. 一,先来一个最简单的DDA算法 DDA算法全称为数值微分法,基于微分方程来绘制直线. ①推导微分方程如下: ...
- OpenGl 绘制一个立方体
OpenGl 绘制一个立方体 为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定6*4=24个顶点.但是我们知道,一个立方体其实总共只有八个顶点,要指定24次,就意味着每个顶点其实重复 ...
- 第10课 OpenGL 3D世界
加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...
随机推荐
- python cookbook第三版学习笔记三:列表以及字符串
过滤序列元素: 有一个序列,想从其中过滤出想要的元素.最常用的办法就是列表过滤:比如下面的形式:这个表达式的意义是从1000个随机数中选出大于400的数据 test=[] for i in range ...
- linux install beanstalkd
you can instal it via git and then copy systemd script: Step 0. Install git yum install git Step 1. ...
- Android/iOS Remote debugging
简单介绍 使用下面方法可以定位webview中的元素,无法定位view中的元素. 原文地址:http://mp.weixin.qq.com/s/y_UfdgjT_pkKgYivJmqt7Q webvi ...
- curl下载安装
curl下载地址 https://curl.haxx.se/download.html 选择windows generic 下的 下载安装 安装完后解压配置系统环境变量 CURL_HOME ...
- save create
其中 create 和 create!就等於 new 完就 save 和 save!,有無驚嘆號的差別 在於 validate 資料驗證不正確的動作,無驚嘆號版本會回傳布林值(true 或 false ...
- 借助node.js + mysql 学习基础ajax~
很多小白不知道ajax怎么学,所以就弄了个node后台模拟下基本的ajax请求. 环境要求是安装node~ 先上linkMysql.js var mysql = require('mysql') va ...
- hihocoder 微软编程之美2015 初赛 第一场 (树算法 + 暴力思想 + 搜索思想)
题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...
- Contiki Rtimer 模块
一.rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with pre ...
- html的head中的常见元素
<head></head>中有charset, title,link 操作系统默认的字符编码就是gbk. html的加强 (1)<a href="#" ...
- 我所理解的RESTful Web API [设计篇]【转】
原文:http://www.cnblogs.com/artech/p/restful-web-api-02.html <我所理解的RESTful Web API [Web标准篇]>Web服 ...