搜档网
当前位置:搜档网 › OpenGl画线 虚线 折线

OpenGl画线 虚线 折线

图形学OpenGL★点,虚线,各种形状


#include "windows.h"
#include
#include
#include

void myinit(void);
void DrawMyObjects(void);
void myReshape(GLsizei w,GLsizei h);
void display(void);

void myinit(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glShadeModel(GL_FLAT);
}

void myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

if(w<=h)
glOrtho(-20.0,20.0,-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-50.0,50.0);
else
glOrtho(-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-20.0,20.0,-50.0,50.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}


void display(void)
{

glColor3f(1.0,1.0,0.0);
DrawMyObjects();
glFlush();
}


void DrawMyObjects(void)

{
glPointSize(5.0); //设置点大小
glBegin(GL_POINTS);//画点
glColor3f(1.0,0.0,0.0);
glVertex2f(-10.0,11.0);
glColor3f(1.0,1.0,0.0);
glVertex2f(-9.0,10.0);
glColor3f(0.0,1.0,1.0);
glVertex2f(-8.0,12.0);
glEnd();

glLineWidth(1.0);//设置线大小
glBegin(GL_LINES);//画实线
glColor3f(1.0,1.0,0.0);
glVertex2f(-11.0,8.0);
glVertex2f(-7.0,7.0);
glColor3f(1.0,0.0,1.0);
glVertex2f(-11.0,9.0);
glVertex2f(-8.0,6.0);
glEnd();

glLineWidth(1.0);//设置不闭合折线大小
glBegin(GL_LINE_STRIP);//画不闭合折线
glVertex2f(-3.0,9.0);
glColor3f(0.0,1.0,0.0);
glVertex2f(2.0,6.0);
glColor3f(0.0,0.0,1.0);
glVertex2f(3.0,8.0);
glColor3f(1.0,0.0,1.0);
glVertex2f(-2.5,6.5);
glEnd();

glLineWidth(1.0);//设置闭合折线大小
glBegin(GL_LINE_LOOP); //画闭合折线
glColor3f(0.0,1.0,1.0);
glVertex2f(7.0,7.0);
glVertex2f(8.0,8.0);
glVertex2f(9.0,6.5);
glVertex2f(10.3,7.5);
glVertex2f(11.5,6.0);
glVertex2f(7.5,6.0);
glEnd();

glEnable(GL_LINE_STIPPLE);//画虚线开始
glLineWidth(1.0);

glLineStipple(1,0x00FF);//第一个参数是倍数,第二个是16进制数
glBegin(GL_LINES);
glColor3f(1.0,1.0,0.0);
glVertex2f(-11.0,8.0);
glVertex2f(-3.0,7.0);
glEnd();

glLineStipple(1,0x00FF);
glBegin(GL_LINES);
glColor3f(1.0,0.0,1.0);
glVertex2f(-15.0,9.0);
glVertex2f(-9.0,6.0);
glEnd();
glDisable(GL_LINE_STIPPLE);//画虚线结束


glPolygonMode(GL_FRONT,GL_LINE); //正面画线
//第一个参数有正面背面GL_FRONT,GL_BACK,GL_FRONT_AND_BACK,第二个参数有GL_LINE,GL_FILL,GL_POINT
glBegin(GL_POLYGON); //绘制凸多边形
glColor3f(0.5,0.3,0.7);
glVertex2f(-7.0,2.0);
glVertex2f(-8.0,3.0);
glVertex2f(-10.3,0.5);
glVertex2f(-7.5,-2.0);
glVertex2f(-6.0,-1.0);
glEnd();

glPolygonMode(GL_FRONT,GL_LINE); //正面画线
glPolygonMode(GL_BACK,GL_FILL); //背面填充
glB

egin(GL_TRIANGLES);//画三角形
glColor3f(0.2,0.5,0.7); //逆时针显示,正面
glVertex2f(-10.0,-5.0);
glVertex2f(-12.3,-7.5);
glVertex2f(-8.5,-6.0);

glColor3f(0.2,0.7,0.5); //顺时针显示,背面
glVertex2f(-8.0,-7.0);
glVertex2f(-7.0,-4.5);
glVertex2f(-5.5,-9.0);
glEnd();

glBegin(GL_TRIANGLE_STRIP);//画线性三角形组
glVertex2f(-1.0,-8.0);
glVertex2f(-2.5,-5.0);
glColor3f(0.8,0.8,0.0);
glVertex2f(1.0,-7.0);

glColor3f(0.0,0.8,0.8);
glVertex2f(2.0,-4.0);

glColor3f(0.8,0.0,0.8);
glVertex2f(4.0,-6.0);
glEnd();

glBegin(GL_TRIANGLE_FAN);//画扇形
glVertex2f(8.0,-6.0);
glVertex2f(10.0,-3.0);
glColor3f(0.8,0.2,0.5);
glVertex2f(12.5,-4.5);

glColor3f(0.2,0.5,0.8);
glVertex2f(13.0,-7.5);

glColor3f(0.8,0.5,0.2);
glVertex2f(10.5,-9.0);
glEnd();

glBegin(GL_QUADS); //画四边形
glColor3f(0.7,0.5,0.2);
glVertex2f(0.0,2.0);
glVertex2f(-1.0,3.0);
glVertex2f(-3.3,0.5);
glVertex2f(-0.5,-1.0);

glColor3f(0.5,0.7,0.2);
glVertex2f(3.0,2.0);
glVertex2f(2.0,3.0);
glVertex2f(0.0,0.5);
glVertex2f(2.5,-1.0);
glEnd();

glBegin(GL_QUADS); //画连续填充四边形
glVertex2f(6.0,-2.0);
glVertex2f(5.5,1.0);
glVertex2f(8.0,-1.0);
glColor3f(0.8,0.0,0.0);
glVertex2f(9.0,2.0);

glVertex2f(11.0,-2.0);
glColor3f(0.0,0.0,0.8);
glVertex2f(11.0,2.0);

glVertex2f(13.0,-1.0);
glColor3f(0.0,0.8,0.0);
glVertex2f(14.0,1.0);
glEnd();
}


int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (0, 0);
glutCreateWindow ("Draw");
myinit();//init ();
glutReshapeFunc(myReshape);
glutDisplayFunc(display);

//glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}

相关主题