原文作者:aircraft
原文链接:https://www.cnblogs.com/DOMLX/p/12054507.html
好多次都是画坐标轴的三条直线画不出来,虽然最后都解决了 但是还是耽误了我超级多时间 因为根本无法调试啊 就一个黑框框 其他图形又能画的出来
看到这种现象 真的是脑袋都要炸了好吧!!!
第一次没有画出来坐标轴直线是在c#的winform界面画坐标轴
我的画图代码大概是这样 先画了obj模型图像 然后 在画坐标轴直线 无论我怎么画都是画不出来 我脑袋都要炸了 就一个黑框框 单独画模型 单独画坐标轴都有图形 一起就不行了
然后各种百度无果后 先画线段坐标轴 在画模型 调换一下两者的顺序 搞定 出来了 总结一下原因:唔。。。。我也不知道原因 可能这个东西有毒吧
fun
{
....
drawObj();
...
drawLine(); }
第二次没有画出来直线 是在c++ 下普通的opengl环境
这次的原因是好像是我画的线段超出了什么什么的范围然后就出不来了 反正百度之后说
加上这个
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
代码 设置一下什么正投影的 不要用 gluPerspective 设的投影矩阵
好的 又解决了 怎么解决的 我也不知道。。。。唉 我就是个复制粘贴的机器人吧
第三次没有画出来坐标轴是在MFC的界面里面画的 这次又是可以画出模型 但是又画不出坐标轴
于是我又用第一次画图像的方法去画 把两个的绘制顺序改了一下 但是没有解决
我的画坐标轴的代码如下:
glLineWidth(5.0f); //设置直线的宽度为2个像素 glBegin(GL_LINE);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f); //绘制线段的起点,这里为相对坐标,即相将glTranslatef移动后的点作为原点
glVertex3f(3000.0f, 0.0f, 0.0f); //确定第一条线段的终点(3,0,0)
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f); //确定第二条线段的起点(0,0,0)
glVertex3f(0.0f, 3000.0f, 0.0f); //确定第二条线段的终点(0,3,0)
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 3000.0f); glEnd();
随便一看 好像就是很正常的代码 我那什么投影矩阵也设置了 第二步那个
然后这一次是有点绝望了 到底问题出在什么地方????
然后去用别人绘制一条线段的代码 拿来运行了一下 发现线段是可以出来的 天哪 简直就是让我发现了什么新世界 感觉我有救的了
然后我就对比我们两个的代码是有什么地方是不一样的
最后终于找到了
glBegin(GL_LINE);
问题出在这里 他们可以画出线段的代码是glBegin(GL_LINES); 加了个S的 我想原因应该是我画的是坐标轴 有好多直线 所有要加个S?????? 唉opengl真是太复杂 经常动不动就是一个黑框框给你 头疼
若有兴趣交流分享技术,可关注本人公众号,里面会不定期的分享各种编程教程,和共享源码,诸如研究分享关于c/c++,python,前端,后端,opencv,halcon,opengl,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识