D50.1.0 如何使用OpenGL绘制三维坐标系
如何在屏幕左下角绘制直角坐标系?
- 第一步,指定屏幕绘制区域
- 第二步,设定投影效果、观察坐标及旋转缩放等
- 第三步,绘制坐标轴,绘制箭头
- 第四步,添加“xyz”字符
第一,图中圆环所在的指定区域与坐标轴所在的区域是两个相互独立的空间,通过使用glViewport函数限定。
glViewport(0,0,500,500);//指定圆环绘制空间,从(0,0)位置开始,长宽分别为500glViewport(0,300,200,200);//指定坐标轴的绘制空间,从(0,300)位置开始,长宽分别为200
第二,设定投影效果、观察坐标及旋转缩放等
//设置投影效果//
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-500, 500, -500, 500, -500, 500); //指定了一个正方体区域,在这个区域内的图形才能正常显示//设置模型视图矩阵,开始画图//
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 2, 0, 0, 0, 0, 0, 0, 1); //从(0,2,0)位置看向原点,z轴向上
第二,考虑到实际应用中我们需要对圆环进行旋转,那坐标系也应该进行旋转,这样才能一一对应上。
glRotatef(_xAngle, 1, 0, 0);
glRotatef(_yAngle, 0, 1, 0);
//传入的角度根据具体需求具体设定
第三,绘制坐标轴。可以将坐标轴画成一个上下底面同宽,长度较长的一个圆柱体;而坐标箭头可以看成头部很宽,底部宽度为0的圆柱体。
const int AXES_LEN = 300;
const int ARROW_LEN = 100;
const int ARROW_RADIUS = 30;GLUquadricObj *objCylinder = gluNewQuadric();
//确定坐标系原点
glPushMatrix();
glColor3f(1.0f, 1.0f, 1.0f);
glutSolidSphere(15, 20, 20);
glPopMatrix();glPushMatrix();
glColor3f(1.0f, 0.0f, 0.0f);
glutSolidSphere(0.25, 6, 6);
gluCylinder(objCylinder, 10, 10, AXES_LEN, 10, 5); //z
glTranslatef(0, 0, AXES_LEN);
gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5); //z arrow
glPopMatrix();glPushMatrix();
glColor3f(0.0f, 1.0f, 0.0f);
glRotatef(90, 1.0, 0.0, 0.0);
gluCylinder(objCylinder, 10, 10, AXES_LEN, 10, 5); //Y
glTranslatef(0, 0, AXES_LEN);
gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5); //Y arrow
glPopMatrix();glPushMatrix();
glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(90, 0.0, 1.0, 0.0);
gluCylinder(objCylinder, 10, 10, AXES_LEN, 10, 5); //X
glTranslatef(0, 0, AXES_LEN);
gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5); //X arrow
glPopMatrix();
上述代码中需要注意到的是x轴和y轴的是根据z轴旋转得到的。
第四步,添加“xyz”字符,这是我目前遇到的问题。我尝试使用如下代码:
glRasterPos3f(300, 0, 0);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, 'y');
但是现实的字符出现了翻转,如下图:
最后需要加上收尾的代码,这样才能刷新缓冲区。
glFinish();
glFlush(); // remember to flush GL output!
D50.1.0 如何使用OpenGL绘制三维坐标系相关推荐
- python的三维坐标轴设置_使用PyOpenGL绘制三维坐标系实例
我就废话不多说了,直接上代码吧! def drawCoordinate(): ''' 绘制三维的坐标系,并绘制由坐标轴构成的平面的网格,各个坐标轴的颜色以及由坐标轴所引出的网格线的颜色为: x: (1 ...
- python画三维坐标_使用PyOpenGL绘制三维坐标系实例
我就废话不多说了,直接上代码吧! def drawCoordinate(): ''' 绘制三维的坐标系,并绘制由坐标轴构成的平面的网格,各个坐标轴的颜色以及由坐标轴所引出的网格线的颜色为: x: (1 ...
- 使用MFC的CDC类绘制三维坐标系及球面函数
系列链接 使用MFC的CDC类绘制二维坐标系及正余弦函数 / 源码 使用MFC的CDC类绘制三维坐标系及球面函数 / 源码 概述 本文使用MFC的CDC类绘制三维坐标系及球面函数.首先计算推导出三维坐 ...
- matlab 三维y轴平面图,#如何在excel中绘制三维坐标系?#excel怎么画图平面坐标图...
用excel绘制曲线图时如何进行坐标轴转换 点"插入"->"图表"->"XY图","子图表类型"选择&quo ...
- 三维立体坐标系 html5,几何画板绘制三维坐标系的操作方法
最近很多网友表示自己不清楚几何画板如何绘制三维坐标系的操作,而本篇文章就来给大家讲解几何画板绘制三维坐标系的操作流程,大家都来一起学习吧. 几何画板绘制三维坐标系的操作方法 添加自定义工具.在广大版友 ...
- matlab怎么画三维坐标的二维图,excel怎么画二维坐标表格图(如何在excel中绘制三维坐标系?)...
在excle中怎么把二维图形变成三维图形 你说的是图表吗,如果是的话就这样操作 excel2007以上版本:选中图表-点击设计选项卡-最左面有更改图表类型-选择合适的类型-确定 excel2003也是 ...
- opengl绘制三维人物luweiqi
素材中有四个.bmp格式的纹理文件和一个.txt的模型参数文件 文件格式说明: 纹理文件数量纹理文件1(字符串)//.bmp纹理文件2(字符串)纹理文件3(字符串)... 材质数量ambient(fl ...
- Android开发笔记(一百五十三)OpenGL绘制三维图形的流程
从这篇文章开始,接下来会连载一系列的OpenGL相关博文,好好探讨如何在Android中进行OpenGL开发. OpenGL的全称是"Open Graphics Library", ...
- android绘制过程3d图形,Android开发之OpenGL绘制三维图形的流程
从这篇文章开始,接下来会连载一系列的OpenGL相关博文,好好探讨如何在Android中进行OpenGL开发. OpenGL的全称是"Open Graphics Library", ...
最新文章
- 备忘-常用工具/网页
- C#中实现计时器功能(定时任务和计时多长时间后执行某方法)
- 34.11. 视图、存储过程、函数
- 编程生涯 21 载,那些我踩过的坑
- .NET 6新特性试用 | record struct
- android 文件 c语言 jni,Android jni 调用的so文件一个函数的反汇编 高手来看看
- DIV固定宽度和动态拉伸混合水平排列
- Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
- java的import和python的import对比_import导入的是什么
- ROS(3)订阅者subscriber编程实现
- Broadcast receiver之我见
- arm上移植iconv命令
- 使用lombok时可以自定义get、set方法
- 中国地图json 文件下载
- java overload_java之方法重载(overload)
- 【微信篇】电脑版微信的照片视频文件位置变化
- [Qualcomm][Audio] 高通Audio Bringup Guide
- 微信里iphone后退不刷新问题解决方案,真实有效
- 请问Bat文件是用什么什么语言写的?
- 怎样清空微信全部聊天记录?轻松几步!如何操作清除微信聊天记录?
热门文章
- js校验json格式
- 一波未平,一波又起:“永恒之石”恶意程序利用七种NSA“网络武器”
- Django计算机毕业设计流浪猫狗救助站(程序+lw)Python
- 基于HI3516/HI3518/HI3559内部ADC驱动实现
- 负数的二进制表示与位运算
- 微信8.0安卓内测版来了!!!
- 小学计算机教师德育工作计划,XX年春季小学部教师德育工作计划.doc
- php 二维数组分组,php 二维数组的分组排序实现代码
- 计算机要点概述+交互方式+基本的dos命令+文本文件和字符集+进制转换+环境变量
- 在windows上开发linux程序