用opengl怎么画两条直线互相垂直直的直线

openGL如何绘制一个垂直于Y轴的圆盘,库函数glDisk()绘制的是垂直于Z轴的.知道的可以加分.
额,这个简单啊!在使用glDisk()之前,使用glRotatef进行旋转,我不知道glDisk()本身画出来的效果是什么?不知道你所谓的“垂直于Z轴”是什么意思,感觉你是才学习OpenGL吧,你应该说你的圆盘平面的法线是什么方向.如果你的圆盘平面的法线和Z轴平行(OpenGL里Z轴正方向是垂直屏幕朝外的),那么你使用glRotatef(90.0,1.0,0.0,0.0),再画你的圆盘应该能得到你要的效果,试试...
为您推荐:
其他类似问题
扫描下载二维码Posts - 16,
Articles - 0,
Comments - 18
22:57 by 采药的蜗牛, ... 阅读,
程序来自《OpenGL编程指南第七版》
1 #include "stdafx.h"
2 #include &Windows.h&//头文件一定要加上,因为windows版本的gl.h和glu.***件内部使用的宏是在windows.h中定义的
3 #include &gl/GL.h&
4 #include &gl/GLU.h&
5 #include &gl/glut.h&
6 static GLfloat spin=0.0;
7 int drawOneLine(float x1,float y1,float x2,float y2)
glBegin(GL_LINES);
glVertex2f((x1),(y1));
glVertex2f((x2),(y2));
16 void init (void)
glClearColor(0.5,0.5,0.5,0.0);
glShadeModel(GL_FLAT);
21 void display(void)
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,0.0);
glEnable(GL_LINE_STIPPLE);
glLineStipple(1,0x0101);//注意glLineStipple用法以及每个参数的意义
drawOneLine(50.0,125.0,150.0,125.0);
glLineStipple(1,0x00FF);
drawOneLine(150.0,125.0,250.0,125.0);
glLineStipple(1,0x1C47);
drawOneLine(250.0,125.0,350.0,125.0);
glLineWidth(5.0);
glLineStipple(1,0x0101);
drawOneLine(50.0,100.0,150.0,100.0);
glLineStipple(1,0x00FF);
drawOneLine(150.0,100.0,250.0,100.0);
glLineStipple(1,0x1C47);
drawOneLine(250.0,100.0,350.0,100.0);
glLineWidth(1.0);
glLineStipple(1,0x1C47);
glBegin(GL_LINE_STRIP);
for (i=0;i&7;i++)
glVertex2f(50.0+((GLfloat)i+50.0),75.0);
for (i=0;i&6;i++)
drawOneLine(50.0+((GLfloat)i+50.0),50.0,50.0+((GLfloat)(i+1)+50.0),50.0);
glLineStipple(5,0x1C47);
drawOneLine(50.0,25.0,350.0,25.0);
glDisable(GL_LINE_STIPPLE);
glFlush();
54 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);
62 int main(int argc,char**argv)
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,150);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
运行的效果图:君,已阅读到文档的结尾了呢~~
精品:cad 虚线变实线 cad实线改虚线 cad虚线显示实线 word表格虚线变实线 表格虚线怎么变实线 cad实线变成虚线 实线虚线 实线和虚线 opengl绘制立方体
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
使用opengl程序绘制实线、虚线和点划线
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口OpenGL学习(4)
绘制直线跟上一节绘制点差不多,毕竟直线是由点组成的。但这里需要注意的是,我们说的直线是有端点的,不是射线和构造线(两端无线延伸的)。
下面上代码,看看如何绘制直线。
void myDisplay(void)
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
glBegin(GL_LINES);
glColor3f(1.0,0.0,0.0);
glVertex3f(0.25,0.25,0);
glVertex3f(0.75,0.25,0);
glFlush();
}效果如下:
与绘制点的区别就是使用了GL_LINES,还记得点用的是什么吗?喔,对了,用的是GL_POINTS
上节我们绘制点时,第一次比较小,然后通过glPointSize为点设置了大小,然后就看得到了。
下面我们也给直线设个大小就是线宽,使用glLineWidth(GLFloat size);
OK,到此我们就学会如何绘制直线了,可是这只是绘制一段直线。如果要绘制多段线的话,是不是就在后面一直补充端点坐标呢?
我们到是可以试试,看看结果。
glBegin(GL_LINES);
glColor3f(1.0,0.0,0.0);
glVertex3f(0.25,0.25,0);
glVertex3f(0.75,0.25,0);
glVertex3f(0.75,0.75,0);
glVertex3f(0.25,0.75,0);
喔,好可以,中间两个端点没有连上。我们猜猜为什么呢?
opengl把第一个点作为起点,把第二个点作为终点,然后绘制了一条直线。然后再把第三个点作为起点,把第四个点作为终点,又绘制了第二条直线。
所以第二个点和第三个点之间是没有连线的。这就相当于GL_LINES等价于MoveTo,LineTo,MoveTo,LineTo......
那怎么将中间断的地方连上呢,难道要写冗余的坐标点吗?这大可不必,Opengl给我们准备了GL_LINE_STRIP,用它替换调GL_LINES就可以了。
这里就不上截图了,大家脑补一下吧。
如果想让第四点与第一点也连上,可以使用GL_LINE_LOOP替换调GL_LINE_STRIP,这样就构成封闭的多段线啦。
下面我们学习如何绘制点划线,也就是平时常见的虚线等。
先上代码看看有什么变化:
void myDisplay(void)
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
glEnable(GL_LINE_STIPPLE);
glLineStipple(2, 0xAAAA);
glLineWidth(5.0);
glBegin(GL_LINE_LOOP);
glColor3f(1.0,0.0,0.0);
glVertex3f(0.25,0.25,0);
glVertex3f(0.75,0.25,0);
glVertex3f(0.75,0.75,0);
glVertex3f(0.25,0.75,0);
glDisable(GL_LINE_STIPPLE);
glFlush();
}是的,这里需要用glEnable函数开启GL_LINE_STIPPLE这个标志。然后在glEnd后再关闭。
开启后,使用glLineStipple (GLint factor, GLushort pattern)设置样式。
我在代码中只用了0xAAAA这个样式,其实有很多的,下面给大家个列表:
好了,今天就学习到这里。
下次学习绘制面。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:76795次
积分:1611
积分:1611
排名:第18452名
原创:78篇
转载:17篇
评论:26条
阅读:1354
阅读:2755
阅读:8210
(1)(4)(5)(5)(5)(6)(8)(4)(5)(5)(5)(5)(4)(4)(3)(5)(8)(15)(1)opengl如何给 闭合直线画出来的图形上颜色
用glBegin(GL_QUADS);
为您推荐:
其他类似问题
扫描下载二维码

参考资料

 

随机推荐