zoukankan      html  css  js  c++  java
  • 【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)
    {
    	GLubyte fly[] = {
    		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    		0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60, 
    		0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20, 
    		0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20,
    		0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22, 
    		0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 
    		0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22,
    		0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 
    		0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC, 
    		0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30,
    		0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0, 
    		0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0, 
    		0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30,
    		0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08, 
    		0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0c, 0x08, 
    		0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08};
    
    	GLubyte halftone[] = {
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    		0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55};
    
    	glClear (GL_COLOR_BUFFER_BIT);
    	glColor3f (1.0, 1.0, 1.0);//白色
    
    	//矩形1
    	glRectf (25.0, 25.0, 125.0, 125.0);	//绘制矩形
    
    	//矩形2
    	glEnable (GL_POLYGON_STIPPLE);		//开启多边形点画功能
    	glPolygonStipple (fly);				//定义点画模式填充内容
    	glRectf (125.0, 25.0, 225.0, 125.0);//绘制矩形
    	
    	//矩形3
    	glPolygonStipple (halftone);
    	glRectf (225.0, 25.0, 325.0, 125.0);
    	glDisable (GL_POLYGON_STIPPLE);		//关闭多边形点画功能
    
    	glFlush ();
    }
    
    void init (void) 
    {
    	glClearColor (0.0, 0.0, 0.0, 0.0);
    	glShadeModel (GL_FLAT);    //采用恒定着色模式,使用图元中某个顶点的颜色来渲染整个图元。  
    }
    
    void reshape (int w, int h)
    {
    	glViewport (0, 0, (GLsizei) w, (GLsizei) h);
    	glMatrixMode (GL_PROJECTION);	 //将当前矩阵指定为投影矩阵  
    	glLoadIdentity ();				 //把当前矩阵设为单位矩阵  
    	gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
    }
    
    void keyboard(unsigned char key, int x, int y)
    {
    	switch (key) {
    	case 27:
    		exit(0);
    		break;
    	}
    }
    
    int main(int argc, char** argv)
    {
    	glutInit(&argc, argv);
    	glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    	glutInitWindowSize (350, 150);
    	glutCreateWindow (argv[0]);
    	init ();
    	glutDisplayFunc(display);
    	glutReshapeFunc(reshape);
    	glutKeyboardFunc (keyboard);
    	glutMainLoop();
    	return 0;  
    }

    3.效果图


  • 相关阅读:
    如何测试私有/受保护的方法? (译文)
    推荐一款vs.net中的版本号管理工具,
    ILMerge 合并多个程序集为一个.
    https://XXX/.xml Error:800C000E
    an easy way to debug windows service in .net
    提高安全性, 删除IIS中的response http header
    我的<程序人生>的一点看法.
    vs.net 2005 beta2 之痛
    ANT打包
    Linq to xml: XDocument对象
  • 原文地址:https://www.cnblogs.com/fzll/p/3954574.html
Copyright © 2011-2022 走看看