返回顶部
首页 > 资讯 > 精选 >怎么利用OpenGL画坐标轴指示图
  • 211
分享到

怎么利用OpenGL画坐标轴指示图

2023-06-26 04:06:07 211人浏览 独家记忆
摘要

本篇文章给大家分享的是有关怎么利用OpenGL画坐标轴指示图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。利用OpenGL画坐标轴指示图 最开始是想在左下角位置画个坐

本篇文章给大家分享的是有关怎么利用OpenGL画坐标轴指示图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

利用OpenGL画坐标轴指示图

 最开始是想在左下角位置画个坐标轴

怎么利用OpenGL画坐标轴指示图

后来在网上找了一个,也是别人搬运的,没有出处。学习了一下,感觉不太方便

#include <iOStream>  using namespace std; #include<gl/glut.h>   //这个N是用来计数的,为了验证两个回调函数display和reshape谁先执行//结果是reshape先执行int N = 0; GLfloat transx, transy;GLfloat scale; int primw = 300;int primh = 300;GLfloat rotatex = 0, rotatey = 0;GLint mousepx, mousepy; void rend(void){    glClear(GL_COLOR_BUFFER_BIT);    glPointSize(8);    glLineWidth(2);        glPushMatrix();    glTranslatef(transx, transy, 0);    //glTranslatef(0, 0, 0);    glRotatef(rotatex, 1, 0, 0);    glRotatef(rotatey, 0, 1, 0);    glBegin(GL_LINES);    glColor3f(0, 1, 0);    glVertex3f(0, 0, 0);    glVertex3f(0, 2, 0);    glColor3f(1, 0, 0);    glVertex3f(0, 0, 0);    glVertex3f(2, 0, 0);    glColor3f(0, 0, 1);    glVertex3f(0, 0, 0);    glVertex3f(0, 0, 2);    glEnd();    glPopMatrix();    glFlush();    if (N < 3)        cout << "rend" << endl;    N++;} void reshape(int w, int h){    glViewport(0, 0, w, h);    glMatrixMode(GL_PROJECTioN);    glLoadIdentity();    if (w <= h)        gluOrtho2D(-10, 10, -10.0 / w * h, 10.0 / w * h);    else        gluOrtho2D(-10.0 / h * w, 10.0 / h * w, -10, 10);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    if (w <= h)    {           transx = (50 - w / 2.0) * 20.0 / w;        transy = (50 - h / 2.0) * 20.0 / w;    }    else    {                transx = (50 - w / 2.0) * 20.0 / h;        transy = (50 - h / 2.0) * 20.0 / h;    }    if (N < 3)        cout << "reshape" << endl;    N++;} void motion(int x, int y)//鼠标按下移动{    int w, h;    w = glutGet(GLUT_WINDOW_WIDTH);    h = glutGet(GLUT_WINDOW_HEIGHT);    if (0 <= x && x <= w && 0 <= y && y <= h)    {        rotatex = -(mousepy - y) / (GLfloat)h * 360;        rotatey = -(mousepx - x) / (GLfloat)w * 360;                glutPostRedisplay();    }} void mousedown(int mouse, int state, int x, int y){    if (state == GLUT_DOWN)    {        mousepx = x;        mousepy = y;    }    //  cout<<"mousepx:mousepy"<<endl;      //  cout<<mousepx<<"  "<<mousepy<<endl;} int main(int arGC, char** argv){    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_RGB);    glutInitwindowsize(primw, primh);    glutCreateWindow("coordination");     glClearColor(1, 1, 1, 0);    glutDisplayFunc(rend);    glutMotionFunc(motion);    glutMouseFunc(mousedown);    glutReshapeFunc(reshape);//最先调用,比display先    glutMainLoop();    return 0;}

是这样的效果,效果还行,只是这种方式不太方便嵌到代码中

怎么利用OpenGL画坐标轴指示图

 最终还是决定不在左下角画了,直接在模型上画出来坐标轴,用颜色区分xyz

怎么利用OpenGL画坐标轴指示图

 顶点着色器如下,就是将三条线的顶点和颜色数组输入到顶点着色器中,并与模型使用相同的MVP

#version 330 corelayout (location = 0) in vec3 aPos;layout (location = 1) in vec3 aColor; unifORM mat4 modelview;uniform mat4 view;uniform mat4 projection;out vec3 color; void main(){        gl_Position = projection * view * modelview * vec4(aPos, 1.0);        color = aColor;}

如何使用OpenGL绘制三维坐标系

第一,图中圆环所在的指定区域与坐标轴所在的区域是两个相互独立的空间,通过使用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); //zglTranslatef(0, 0, AXES_LEN);gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5); //z arrowglPopMatrix();glPushMatrix();glColor3f(0.0f, 1.0f, 0.0f);glRotatef(90, 1.0, 0.0, 0.0);gluCylinder(objCylinder, 10, 10, AXES_LEN, 10, 5); //YglTranslatef(0, 0, AXES_LEN);gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5); //Y arrowglPopMatrix();glPushMatrix();glColor3f(0.0f, 0.0f, 1.0f);glRotatef(90, 0.0, 1.0, 0.0);gluCylinder(objCylinder, 10, 10, AXES_LEN, 10, 5); //XglTranslatef(0, 0, AXES_LEN);gluCylinder(objCylinder, ARROW_RADIUS, 0, ARROW_LEN, 10, 5); //X arrowglPopMatrix();

上述代码中需要注意到的是x轴和y轴的是根据z轴旋转得到的。

第四步,添加“xyz”字符,这是我目前遇到的问题。我尝试使用如下代码:

glRasterPos3f(300, 0, 0);glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, 'y');

以上就是怎么利用OpenGL画坐标轴指示图,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么利用OpenGL画坐标轴指示图

本文链接: https://lsjlt.com/news/306603.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么利用OpenGL画坐标轴指示图
    本篇文章给大家分享的是有关怎么利用OpenGL画坐标轴指示图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。利用OpenGL画坐标轴指示图 最开始是想在左下角位置画个坐...
    99+
    2023-06-26
  • 如何利用OpenGL画坐标轴指示图
    目录利用OpenGL画坐标轴指示图如何使用OpenGL绘制三维坐标系 总结利用OpenGL画坐标轴指示图  最开始是想在左下角位置画个坐标轴 后来在网上找了一个...
    99+
    2024-04-02
  • python matplotlib画图时坐标轴重叠显示不全和图片保存时不完整的问题解决
    目录问题解决方案保存时图片不完整的问题补充:使用matplotlib时如何让坐标轴完整显示所有的标签刻度总结问题 在使用matplotlib作图的时候,有的时候会遇到画图时坐标轴重叠...
    99+
    2024-04-02
  • 怎么在JavaScript中利用canvas绘制坐标和线
    怎么在JavaScript中利用canvas绘制坐标和线?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。javascript是一种什么语言javascript是一...
    99+
    2023-06-14
  • 怎么利用Python画花样图
    本篇内容介绍了“怎么利用Python画花样图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!地球仪加线根据地球仪的区域显示在相应的位置图形上加...
    99+
    2023-06-25
  • 使用R语言怎么绘制双坐标图直方图
    这期内容当中小编将会给大家带来有关使用R语言怎么绘制双坐标图直方图,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是R语言R语言是用于统计分析、绘图的语言和操作环境,属于GNU系统的一个自由、免费、源代...
    99+
    2023-06-14
  • 用Python计算点估计预测评价指标(误差指标RMSE、MSE、MAE、MAPE) ,画图展示
    机器学习的回归问题常用RMSE,MSE, MAE,MAPE等评价指标,还有拟合优度R2。由于每次预测出来的预测值再去和原始数据进行误差评价指标的计算很麻烦,所以这里就直接给出他们五个指标的计算函数。把每次预测出来的值和真实值输入这个函数就可...
    99+
    2023-09-11
    python pandas 误差指标 拟合优度
  • matlab中怎么用legend在坐标区上添加图例
    在MATLAB中,可以使用legend函数在坐标区上添加图例。以下是使用legend函数的基本语法: legend('图例1', '...
    99+
    2023-10-25
    matlab
  • python怎么利用scatter绘画散点图
    这篇文章主要介绍了python怎么利用scatter绘画散点图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python怎么利用scatter绘画散点图文章都会有所收获,下面我们一起来看看吧。scatter绘画...
    99+
    2023-07-02
  • 怎么在python中利用matplotlib制作一个双Y轴图
    本篇文章为大家展示了怎么在python中利用matplotlib制作一个双Y轴图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,...
    99+
    2023-06-14
  • QT中在QLabel显示图片并且利用鼠标点击画线问题
    目录在QLabel显示图片并且利用鼠标点击画线以下为我的代码,供参考在QLabel显示图片并且利用鼠标点击画线 最近在做在Label上显示图片并且通过鼠标点击画线,在网上查了很多零零...
    99+
    2022-11-13
    QT QLabel显示图片 QLabel显示图片 鼠标点击画线
  • vue怎么使用高德地图根据坐标定位点
    这篇文章将为大家详细讲解有关vue怎么使用高德地图根据坐标定位点,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文<script> var map,...
    99+
    2024-04-02
  • 怎么利用pyecharts画好看的饼状图
    这篇文章给大家分享的是有关怎么利用pyecharts画好看的饼状图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言使用的pyecharts是v1.0这里需要注意,pyecharts0.5的版本和v1.0以上的版...
    99+
    2023-06-14
  • 怎么利用Python实现图片转字符画
    本文小编为大家详细介绍“怎么利用Python实现图片转字符画”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用Python实现图片转字符画”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。字符画的原理这种字符画...
    99+
    2023-07-02
  • 聊聊React Native中怎么利用echarts画图表
    google 了一下,说是需要降级解决。其实是要跟 expo 版本对应,在安装依赖的时候也会有类似这样的提示,安装提示的版本就可以了于是按照提示做了版本降级:@shopify/react-native-skia@0.1.157 react-...
    99+
    2023-05-14
    React Native ECharts
  • 怎么利用HTML5 Canvas制作键盘及鼠标动画
    这篇文章将为大家详细讲解有关怎么利用HTML5 Canvas制作键盘及鼠标动画,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   键盘控制小球移动   众所周知,我们...
    99+
    2024-04-02
  • 怎么利用echarts画雷达图和折柱混合
    本篇内容主要讲解“怎么利用echarts画雷达图和折柱混合”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用echarts画雷达图和折柱混合”吧!导语通常在根据设计图写echarts的时候,...
    99+
    2023-06-29
  • 怎么在Python中利用subplot 在一张画布同时画多张图
    这期内容当中小编将会给大家带来有关怎么在Python中利用subplot 在一张画布同时画多张图,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。subplot(arg1, arg2, arg3)arg1: ...
    99+
    2023-06-06
  • Matlab怎么利用垂距法实现提取离散坐标数据特征点
    这篇文章主要介绍了Matlab怎么利用垂距法实现提取离散坐标数据特征点的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matlab怎么利用垂距法实现提取离散坐标数据特征点文章都会有所收获,下面我们一起来看看吧。垂...
    99+
    2023-06-29
  • Android怎么用动画显示或隐藏视图
    这篇文章主要介绍“Android怎么用动画显示或隐藏视图”,在日常操作中,相信很多人在Android怎么用动画显示或隐藏视图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android怎么用动画显示或隐藏视图...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作