计算机图形学和OpenGL(二)坐标系和绘制点线函数
2014-09-10 21:25
330 查看
这节开始前我们先了解一下图元的概念。图形软件包中用来描述各种图形元素的函数称为图形输出原语,也称图元(primitive)。而描述对象几何要素的输出图元一般称为几何图元。点和线是最简单的几何图元,本节就会简单介绍点和线段的绘制方法。
一、坐标系统。
坐标系统一般分为屏幕坐标和OpenGL中的绘图坐标。
在上一节中我们简单的写了个示例程序,程序中介绍了gluOrtho2D命令。我们可以利用该命令设定一个二维笛卡尔坐标系。该函数的四个变量制定的是显示图形x和y坐标范围。所以我们可以使用下面代码制定一个正交投影的二维坐标系:
在建立图形的几何描述时,所有OpenGL图元的位置必须用gluOrtho2D函数定义的坐标系统中的绝对坐标给出。
二、OpenGL画点函数
使用下面的函数可以指定一个点的位置和坐标:
在上一节我们看到绘制图形时使用如下代码:
上节我们就写了个简单的画线函数GL_LINES,使用GL_LINES可以连接一对相邻端点完成一条直线段,如果描述端点的坐标只有一个则社么都不会显示,如果端点数为奇数那么最后一个点将被舍弃。如下代码:
使用OpenGL的图元常量GL_LINE_STRIP时,我们可以获得折线,即会按照端点顺序进行连接,直到最后一个端点,代码如下:
接着是最后一个常量参数:GL_LINE_LOOP和上一个不同点就是它会把最后一个点和第一个点相连,组成一个循环,代码:
这样点和线我们都能绘制了,下节我们将会介绍一下画线算法。
参考内容:《计算机图形学(第三版)》 电子工业出版社
转载请标明出处:http://blog.csdn.net/letthinking/article/details/39161019
一、坐标系统。
坐标系统一般分为屏幕坐标和OpenGL中的绘图坐标。
在上一节中我们简单的写了个示例程序,程序中介绍了gluOrtho2D命令。我们可以利用该命令设定一个二维笛卡尔坐标系。该函数的四个变量制定的是显示图形x和y坐标范围。所以我们可以使用下面代码制定一个正交投影的二维坐标系:
glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, 800.0, 0.0, 600.0);
在建立图形的几何描述时,所有OpenGL图元的位置必须用gluOrtho2D函数定义的坐标系统中的绝对坐标给出。
二、OpenGL画点函数
使用下面的函数可以指定一个点的位置和坐标:
glVertex* ();这里*号表示该函数需要有后缀码,这些后缀码用来指明空间的尺寸、坐标值的数据类型和可能的向量形式坐标描述。
在上一节我们看到绘制图形时使用如下代码:
glBegin(GL_POINTS); glVertex2i(700, 15); glVertex2i(100, 555); glEnd();glBegin();函数用来指定要显示的图元类型,在绘制点的时候,图元类型常量是:GL_POINTS,begin和end之间必须有glVertex*();函数。用于指定数值的数据类型的后缀是:i(整数)、s(短整数)、f(浮点数)、d(双精度浮点数)。下面例子中我们绘制了三个点:
glBegin(GL_POINTS); glVertex2i(25, 25); glVertex2i(50, 50); glVertex2i(100, 100); glEnd();换一种方法,我们可以用矩阵来描述点:
int p1[]{25, 25}; int p2[]{50, 50}; int p3[]{100, 100}; glBegin(GL_POINTS); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glEnd();最后,绘制点的完整代码为:
#include "stdafx.h"三、画线函数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string>
#include <windows.h>
#include <GL\glut.h>
using namespace std;
void piontSegment(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
//通过点绘制
glBegin(GL_POINTS); glVertex2i(25, 25); glVertex2i(50, 50); glVertex2i(100, 100); glEnd();
//通过矩阵绘制
/*int p1[]{25, 25}; int p2[]{50, 50}; int p3[]{100, 100}; glBegin(GL_POINTS); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glEnd();*/
glFlush();
}
int _tmain(int argc, char **argv)
{
glutInit(&argc, argv);
//设置窗口的缓存和颜色模型
//下面指定的是:窗口使用单个缓存并且使用RGB颜色模型来设定颜色值。
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
//设置窗口左上角的位置
glutInitWindowPosition(400, 200);
//设置窗口的宽高
glutInitWindowSize(800, 600);
glutCreateWindow("Test OpenGL Program");
//设置显示窗口的背景为白色。参数顺序为:红、绿、蓝、透明度。
glClearColor(1.0, 1.0, 1.0, 0.0);
//设置投影类型:正投影
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//观察参数:x坐标值从0到200,y是从0到150
gluOrtho2D(0.0, 800.0, 0.0, 600.0);
glutDisplayFunc(piontSegment);
glutMainLoop();
system("pause");
return 0;
}
上节我们就写了个简单的画线函数GL_LINES,使用GL_LINES可以连接一对相邻端点完成一条直线段,如果描述端点的坐标只有一个则社么都不会显示,如果端点数为奇数那么最后一个点将被舍弃。如下代码:
glBegin(GL_LINES); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();最后一个点(80,400)将会被舍弃,输出的图形将会如下:
使用OpenGL的图元常量GL_LINE_STRIP时,我们可以获得折线,即会按照端点顺序进行连接,直到最后一个端点,代码如下:
glBegin(GL_LINE_STRIP); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();绘制的图形如下:
接着是最后一个常量参数:GL_LINE_LOOP和上一个不同点就是它会把最后一个点和第一个点相连,组成一个循环,代码:
glBegin(GL_LINE_LOOP); glVertex2i(700, 15); glVertex2i(100, 555); glVertex2i(50, 150); glVertex2i(400, 500); glVertex2i(10, 400); glEnd();生成的图形如下:
这样点和线我们都能绘制了,下节我们将会介绍一下画线算法。
参考内容:《计算机图形学(第三版)》 电子工业出版社
转载请标明出处:http://blog.csdn.net/letthinking/article/details/39161019
相关文章推荐
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_4_中点椭圆算法(上)
- 计算机图形学(三)_图元的属性_3_OpenGL颜色函数(上)
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_5_其他曲线
- 计算机图形学-基于OpenGL的绘制直线及图形变换练习
- 计算机图形学(二)输出图元_14_OpenGL像素阵列函数_2_像素图函数
- 计算机图形学-实验3-掌握利用OpenGL函数进行鼠标、键盘操作,创建菜单
- 【计算机图形学】openGL常用函数
- c&OpenGL实现计算机图形学:双步绘制直线法绘制菱形
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_1_圆生成算法
- 计算机图形学(二)输出图元_14_OpenGL像素阵列函数_3_光栅操作
- 计算机图形学——OpenGL学习系列之绘制3D下的小桌子
- 计算机图形学-实验1-掌握开发环境配置方法和基本图元绘制函数
- OpenGL&nbsp;绘制字母&nbsp;计算机图形学
- 计算机图形学-基于OpenGL的绘制Bezier曲线
- 计算机图形学-基于OpenGL的绘制空间曲线
- 计算机图形学02一一OpenGL 代码实现绘制一条线
- 计算机图形学(三)_图元的属性_14_ OpenGL填充区属性函数(上)
- 计算机图形学(二)输出图元_14_OpenGL像素阵列函数_1_位图函数
- 计算机图形学(二)输出图元_6_OpenGL曲线函数_3_椭圆生成算法
- 计算机图形学(二)输出图元_1_OpenGL画点函数