点画模式

代码如下:

#include <windows.h>
//#include <GLUT/glut.h>
#include <GL/glut.h>
#include <math.h>
#include <iostream>
using namespace std;

#define GL_PI 3.1415f

void RenderScene()
{
    glClear(GL_COLOR_BUFFER_BIT);

    GLfloat y;
    GLint factor = 1;
    GLushort pattern = 0x5555;
    GLfloat sizes[2],curSize;
    glGetFloatv(GL_LINE_WIDTH_RANGE,sizes);

    glEnable(GL_LINE_STIPPLE);
    curSize = sizes[0];
    for(y = -90.0f;y < 90.0f;y += 20.0f)
    {
        glLineStipple(factor,pattern);
        glLineWidth(curSize);
        glBegin(GL_LINES);
            glVertex2f(-80.0f,y);
            glVertex2f(80.0f,y);
        glEnd();

        curSize += 1.0f;
        factor++;
    }
    glFlush();
}

void ChangeSize(GLsizei w,GLsizei h)
{
    if(h==0)
        h = 1;

    GLfloat aspectRatio = (GLfloat)w/(GLfloat)h;

    glViewport(0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    if(w<=h)
        glOrtho(-100,100,-100/aspectRatio,100/aspectRatio,100.0,-100.0);
    else
        glOrtho(-100*aspectRatio,100*aspectRatio,-100,100,100.0,-100.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

void SetupRC()
{
    glClearColor(0.0f,0.0f,0.0f,1.0f);
    glColor3f(1.0f,0.0f,0.0f);
}

int main(int argc, char *argv[])
{
   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
   glutInitWindowSize(800,600);
   glutCreateWindow("Simple");

   glutDisplayFunc(RenderScene);
   glutReshapeFunc(ChangeSize);

   SetupRC();
   glutMainLoop();
   return 0;
}
时间: 2024-12-21 05:18:10

点画模式的相关文章

绘制图形与3D增强技巧(四)----多边形图元及其点画模式

1.四边形图元 glBegin(GL_QUADS); glend(); 2.通用多边形 glBegin(GL_POLYGONS); glend(); 3.多边形点画模式 glenable(GL_POLYGON_STIPPLE); glPolygonStipple(pBitmp); 其中pBitmap为一块指定了数据区域的指针, #include "stdafx.h" // PStipple.cpp // OpenGL SuperBible // Demonstrates OpenGL

直线点画模式

1:开启点画模式:glEnable(GL_LINE_STIPPLE); 2:设置当前模式为点画模式:glLineStipple(1, 0x0101); #include <gl/glut.h> #define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); glVertex2f((x1), (y1)); glVertex2f((x2),(y2)); glEnd(); void init() { glClearColor(0.0, 0.0, 0.0, 0.

OpenGL学习04_点画模式(点画线)

viod glLineStipple(GLint factor,GLshort pattern); OpenGL中设置直线的当前点画模式.pattern参数是由1或0组成的16位序列,它们根据需要进行重复,对一条特定的直线进行点画处理.从这个模式的低位开始,一个像素一个像素的进行处理.如果模式中对应的位是1,就绘制这个像素,否则就不绘制.模式可以使用factor参数(表示重复因子)进行扩展,它与1和0的连续子序列相乘.因此,如果模式中出现了3个1,并且factor是2,那么它们就扩展为6个连续的

OpenGL学习05_点画模式(点画多边形)

在默认情况下,填充多边形是用实心模式绘制的.此外,它们还可以使用一种32位×32位的窗口对齐的点画模式.glPolygonStipple()函数用于指定多边形的点画模式. void glPolygonStipple(const GLubyte *mask); 定义填充多边形的当前点画模式.mask参数是一个指向32×32位图的指针,后者被解释为0和1的掩码.如果模式中出现的是1,那么多边形中对应的像素就被绘制:如果出现的是0,多边形中对应的像素就不被绘制. 下面通过一个绘制小强的Demo演示一下

【OpenGL 学习笔记02】宽点画线

我们要知道,有三种绘图操作是最基本的:清除窗口,绘制几何图形,绘制光栅化对象. 光栅化对象后面再解释. 1.清除窗口 比如我们可以同时清除颜色缓冲区和深度缓冲区 glClearColor (0.0, 0.0, 0.0, 0.0);//指定颜色缓冲区清除为黑色 glClearDepth(1.0);//指定深度缓冲区的清除值为1.0 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//指定要清除的缓冲区并清除 2.绘制几何图形 先要设置绘制颜色,

绘制图形与3D增强技巧(二)----直线图元之点画

一.直线的点画模式:即并不完全填充所有像素来画一条直线,而是用点画的形式,间隔地画一条直线 首先启用点画模式: glEnable(GL_LINE_STIPPLE); 然后自定义创建自己的点画模式 glLineStipple(GLlint factor,GLushort pattern); 其中第一个参数factor为乘法因子,第二个参数pattern为自定义的点画模式:一个16位的值,每个位表示线段的一部分状态为打开或者关闭,采用16进制,例如:0x5555 直线点画的实例程序: // STIP

OpenGL基础(一)1.3点画多边形

一.步骤和语句 建立点画数组:表示32*32位图   像素颜色 1黑0白 GLubyte stippleArray[] = {};//?? 启用点画模式  glEnable(GL_POLYGON_STIPPLE); 调用点画函数  glPolygonStipple( stippleArray ); 画多边形  glRectf(); 禁用点画模式glDisable(GL_POLYGON_STIPPLE);

【OpenGL 学习笔记03】点画多边形

1.点画多边形 //定义填充多边形的点画模式.mask为32 x 32 的位图指针,1画0不画,使用前必须启用多边形点画功能 void glPloygonStipple(const GLubyte* mask); //绘制一个矩形 void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2); 2.示例 #include <GL/glut.h> #include <stdlib.h> void display(void) { G

Opengl绘制计算几何库CGAL三角剖分结果的Demo

Ubuntu下改编了一个用CGAL计算输入点的三角剖分,并用OpenGL显示结果的C++程序. 该Demo可作为一个计算几何及绘图的框架. 代码如下: //编译命令:g++ spatial_sort.cpp -lglut -lGL -lGLU -lCGAL -lCGAL_Core -lgmp #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>   #include <CGAL/Triangulation_eucl