linux 画直线 c程序,绘制直线 - Ubuntu+OpenGL程序设计_Linux编程_Linux公社-Linux系统门户网站...

news/2024/5/9 15:50:55/文章来源:https://blog.csdn.net/weixin_31995337/article/details/116821335

这次主要学习的是关于在opengl中绘制直线,也比较简单

现上图吧

4ce9eddaa7e3bddb9c9845ebf3932a3a.png

这图乍一看上去是不是像是一条条弯曲的直线???

我开始就把他看成这样了,

不过这是个视觉问题,仔细看过起,其实还是一个同心的直线,呵呵

然后上代码

// Lines.cpp

// Demonstrates primative GL_LINES

// OpenGL SuperBible

// Richard S. Wright Jr.

// rwright@starstonesoftware.com

#include

#include

#include

// Define a constant for the value of PI

#define GL_PI3.1415f

// Rotation amounts

static GLfloat xRot = 0.0f;

static GLfloat yRot = 0.0f;

///

// Called to draw scene

void RenderScene(void)

{

GLfloat x,y,z,angle; // Storeage for coordinates and angles

// Clear the window with current clearing color

glClear(GL_COLOR_BUFFER_BIT);

// Save matrix state and do the rotation

glPushMatrix();

glRotatef(xRot, 1.0f, 0.0f, 0.0f);

glRotatef(yRot, 0.0f, 1.0f, 0.0f);

// Call only once for all remaining lines

glBegin(GL_LINES);

z = 0.0f;

for(angle = 0.0f; angle <= GL_PI; angle += (GL_PI / 20.0f))

{

// Top half of the circle

x = 50.0f*sin(angle);

y = 50.0f*cos(angle);

glVertex3f(x, y, z);

// Bottom half of the circle

x = 50.0f*sin(angle+GL_PI);

y = 50.0f*cos(angle+GL_PI);

glVertex3f(x, y, z);

}

// Done drawing points

glEnd();

glPopMatrix();

glutSwapBuffers();

}

///

// This function does any needed initialization on the

// rendering context.

void SetupRC()

{

// Black background

glClearColor(0.0f, 0.0f, 0.0f, 1.0f );

// Set drawing color to green

glColor3f(0.0f, 1.0f, 0.0f);

}

///

// Respond to arrow keys

void SpecialKeys(int key, int x, int y)

{

if(key == GLUT_KEY_UP)

xRot-= 5.0f;

if(key == GLUT_KEY_DOWN)

xRot += 5.0f;

if(key == GLUT_KEY_LEFT)

yRot -= 5.0f;

if(key == GLUT_KEY_RIGHT)

yRot += 5.0f;

if(key > 356.0f)

xRot = 0.0f;

if(key < -1.0f)

xRot = 355.0f;

if(key > 356.0f)

yRot = 0.0f;

if(key < -1.0f)

yRot = 355.0f;

// Refresh the Window

glutPostRedisplay();

}

///

// Window has changed size, recalculate projection

void ChangeSize(int w, int h)

{

GLfloat nRange = 100.0f;

// Prevent a divide by zero

if(h == 0)

h = 1;

// Set Viewport to window dimensions

glViewport(0, 0, w, h);

// Reset coordinate system

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

// Establish clipping volume (left, right, bottom, top, near, far)

if (w <= h)

glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);

else

glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

///

// Main Program Entry Point

int main(int argc, char* argv[])

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

glutInitWindowSize(800,600);

glutCreateWindow("Lines Example");

glutReshapeFunc(ChangeSize);

glutSpecialFunc(SpecialKeys);

glutDisplayFunc(RenderScene);

SetupRC();

glutMainLoop();

return 0;

}

同以前的内容相比呢,陌生的部分只有一小段哈

即以下一小段

glBegin(GL_LINES);

z = 0.0f;

for(angle = 0.0f; angle <= GL_PI; angle += (GL_PI / 20.0f))

{

// Top half of the circle

x = 50.0f*sin(angle);

y = 50.0f*cos(angle);

glVertex3f(x, y, z);

// Bottom half of the circle

x = 50.0f*sin(angle+GL_PI);

y = 50.0f*cos(angle+GL_PI);

glVertex3f(x, y, z);

}

// Done drawing lines

glEnd();

现说下其中的数学问题

for(angle = 0.0f; angle <= GL_PI; angle += (GL_PI / 20.0f))

表示从0角度开始,绘制GL_PI角度,一共绘制20条直线。假如我们把GL_PI改为GL_PI/2

for(angle = 0.0f; angle <= GL_PI/2; angle += ((GL_PI/2) / 20.0f))

得到的图形如下所示

d37c15972ed3355530e567bb690097bb.png

x = 50.0f*sin(angle);

y = 50.0f*cos(angle);

是得到直线左上角坐标

x = 50.0f*sin(angle+GL_PI);

y = 50.0f*cos(angle+GL_PI);

是得到直线右下角坐标

数学问题算是解释完了,下面看看我们核心的绘制问题吧

简化后的这段程序可以写成

glBegin(GL_LINES);glVertex3f(-50, 50, 0);

glVertex3f(50, -50, 0);

glVertex3f(-50,-50, 0);

glVertex3f(50, 50, 0);glEnd();

得到的图形如下所示

72b6c1957a130e19bb4d1714d4171947.png

可以看出,opengl绘制一条直线就是写两个坐标点而已,而每两个坐标点组成一对表示一条直线

glVertex3f所作的事情更具坐在的glBegin参数不同而不同,比如上一篇文章中说道的绘制点中 一个glVertex3f就表示绘制的点的坐标。不过总的来说glVertex3f就是确定一个点的位置而已

好了今天就学到这里了,祝大家学习开心哈

现在每天看点英文,觉得英文的水平进步点了,不过还是很菜,看来读E文书还是有作用的,呵呵0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_776093.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何得到一个网站的后台地址

一、猜测常见的网站后台 1、http://你的网址/login.asp 2、http://你的网址/admin/login.asp 3、http://你的网址/admin/ /admini/ 二、查看该网站的robots.txt 如&#xff1a;网站为&#xff1a;http://www.mmfi.net/ 在后面添加&#xff1a;robots.txt 得到&#xff1a; …

Eclipse添加J2EE开发功能(网站开发)

添加J2EE 其实很简单啦&#xff1a; 1、打开Eclipse&#xff0c;点击Help 2、选择Install New Software 3、在work with中输入网址&#xff1a;http://download.eclipse.org/releases/ 在下面出现的选项选择自己的Eclipse版本 4、在下面框框中选择“Web,XML,Java EE and OSG…

手机沙盒隔离软件_手机怎么安全无病毒的访问风险网站和APP

很多小伙伴&#xff0c;总会在夜深人静的时候不由自主的打开浏览器&#xff0c;登上一些不可描述的网站&#xff0c;不经意访问一些风险网站&#xff0c;或者在不知情的情况下下载了一些流氓APP。经常会有一些可恶的木马、病毒也会在这些网站和APP上&#xff0c;它们防不胜防&a…

网站页面左右_网站SEO优化基础入门与教程

掌握SEO基础知识&#xff0c;是我们进行简单的网站建设必备条件之一&#xff0c;没有子弹&#xff0c;如何打鸟呢?今天小编将给各位分享一下关于网站seo优化的基础知识与seo教程&#xff0c;希望新手SEO们认真看完以下内容&#xff0c;相信会给你带来帮助。一、SEO入门基础&am…

php和seo有关系吗_php seo 优化之文章的字数和SEO的关系

文章内容字数与seo的有关系的&#xff0c;下面就来和小编一起了解一下文章字数与SEO的联系&#xff0c;一起来了解一下吧。一篇文章多少字数更有利于收录&#xff0c;有利于网站的优化&#xff0c;从大的方面来讲&#xff0c;有几个共识的点。1、第一考虑用户的需求是什么&…

php同学录网站设计_php校友录网站设计

校友录系统站我们使用 PHP开发工具&#xff0c;利用其提供的各种面向对象的开发工具&#xff0c;尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象&#xff0c;首先在短时间内建立系统应用原型&#xff0c;然后&#xff0c;对初始原型系统进行需求迭代&#xff0c;不断修…

一些网站

考试资源 考试163&#xff1a;www.test163.com大量的资格认证考试试题&#xff0c;计算机&#xff0c;英语视听材料 IT认证考试资源网&#xff1a;www.itexamprep.com大量IT认证考试题库 中国大学生网&#xff1a;www.chinadaxuesheng.com题库模拟题以及论文 中国考试网&am…

软件测试大型网站如何进行压力测试及性能调优优化方案

性能测试在大型网站系统的设计和开发中非常重要&#xff0c;通常会和容量预估等工作结合在一起&#xff0c;穿插在系统开发的不同方案。性能测试可以帮助我们及时发现系统的性能短板&#xff0c;评估系统的能 性能测试在大型网站系统的设计和开发中非常重要&#xff0c;通常会…

经典网页设计:20个美味的餐馆和食品网站

餐馆和食品网站设计目标是吸引更多的人到他们的店中消费或者购买他们的食品&#xff0c;这类网站通常都会搭配美味的食物图片&#xff0c;吊人胃口。有的网站也会应用视差滚动特效和大背景布局设计来吸引消费者。下面分享的这20个精心设计的餐馆和食品网站案例看起来就让人充满…

SEO知识结构

引一张图片待续转载于:https://www.cnblogs.com/mackxu/archive/2012/10/30/2746211.html

【Python自动化测试网站推荐】免费资源网址,帮你找到所有想要的资源!!

软件测试学习思维导图/工具软件汇总 今天来讲一个小伙伴经常问的一个问题——如何高效的去自学Python ​ 我们今天就来讲一讲&#xff0c;我们作为一个基础不好或者刚刚入行软件测试的新手&#xff0c;如何利用宝贵的时间高效自学Python。 今天从三个方面进行讲解。 PARTO1.为…

jquery 访问手机摄像头_手机网站开发选择zepto还是jquery mobile?

移动端网站现在已经不是什么新鲜的话题&#xff0c;毕竟如果哪个企业没做手机网站就意味着跟移动互联脱节。很多开发者用jquery mobile或者zepto进行移动构建&#xff0c;那么我们选择哪一个框架进行开发呢&#xff1f;jquery mobile和zepto哪个更适合移动网站开发&#xff1f;…

查询ecshop网站代码排查方法_一次线上接口超时的排查过程

1、事件还原昨天下午&#xff0c;收到一个504的告警&#xff0c;显然这是一个超时告警。当时由于手头有其他事情&#xff0c;没在意&#xff0c;就只是瞄了一眼&#xff0c;但是引起告警的方法很熟悉&#xff0c;是我写的&#xff0c;第一反应有点诧异。诧异之后&#xff0c;继…

python学习网站_超全python资料合集

阅读文本大概需要 15 分钟。今天给大家推荐一些python相关的学习资料。在信息爆炸的时代&#xff0c;获取信息的渠道尤为重要。这篇可以称得上比较全的资料集了&#xff0c;希望对大家有所帮助。Python资料汇总(来源&#xff1a; Python学习交流)包括长期必备、入门教程、练手…

linux网站运行系统下载文件,linux系统中如何打开文本文件_网站服务器运行维护,linux,打开,文本文件...

linux终端显示中文乱码_网站服务器运行维护linux终端显示中文乱码的解决方法&#xff1a;1、首先执行【yum -y groupinstall chinese-suport】命令&#xff0c;安装中文语言包&#xff1b;2、编辑配置文件&#xff0c;添加【export LANG"zh_CN.UTF-8"】&#xff1b;3…

潮流设计!15个现代风格的单页扁平化网站设计

下面是15个现代风格的单页扁平化网站设计的例子。扁平化设计&#xff08;Flat UI Web Design&#xff09;和单页网站&#xff08;Single Page Web Design&#xff09;这两个概念可以算作是去年网页设计最热门的趋势。所以设计师结合这两个概念来进行网站设计并不奇怪。看看这些…

(转载)一步步构建大型网站架构

2019独角兽企业重金招聘Python工程师标准>>> 之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;亿万用户网站MySpace的成功秘密、Flickr架构、YouTube网站架构、PlentyOfFish 网站架构学习、WikiPedia技术架构学习笔记。这几个都很典型&#xff0c;我们可以…

html底部添加备案号,网站底部怎么放备案号 WordPress、CMS、discuz等常见程序添加方法...

应工信部备案要求&#xff0c;现在很多站长不知道怎么添加备案号和跳转&#xff0c;导致网站备案被退回&#xff0c;甚至网站备案被注销&#xff0c;需要重新备案&#xff0c;下面给大家讲解一下&#xff0c;常见的程序怎么添加备案号和添加跳转网站上跳转代码一般都是使用html…

form提交后刷新网页_初识meta标签与SEO——零基础自学网页制作

初识meta标签属性如果您学习了《HTML页面中head标签有啥用&#xff1f;——零基础自学网页制作》这一篇教程&#xff0c;一定了解了utf-8这种编码方式的特性&#xff0c;下面我们通过一个练习来看看指定或不指定utf-8编码方式对页面显示的影响。练习一&#xff1a;测试不同浏览…

更新网站 图片缓存_自由职业者品牌建设之什么是百度快照,为何我的快照老不更新?...

网站搭建完毕&#xff0c;提交搜索引擎收录后&#xff0c;大家都会关心自己网站的百度快照&#xff0c;我想大家都会有这样的疑问&#xff1a;到底什么是快照&#xff1f;为什么我的快照不更新&#xff1f;我的快照为什么会倒退&#xff1f;到底权重对快照有没有影响&#xff1…