位置: 编程技术 - 正文
推荐整理分享OpenGL入门二(opengl入门教程(精)),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:opengl2d,opengl教程48讲,opengl入门教程(精),opengl入门书,opengl入门书,opengl入门视频教程,opengl从入门到精通,opengl入门教程(精),内容如对您有帮助,希望把文章链接给更多的朋友!
注意:OpenGL的很多函数都是采用这样的形式,一个相同的前缀再加上参数说明标记,这一点会随着学习的深入而有更多的体会。
三、开始绘制假设现在我已经指定了若干顶点,那么OpenGL是如何知道我想拿这些顶点来干什么呢?是一个一个的画出来,还是连成线?或者构成一个多边形?或者做其它什么事情?为了解决这一问题,OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略)。并由glBegin来指明如何使用这些点。例如我写:glBegin(GL_POINTS); glVertex2f(0.0f, 0.0f); glVertex2f(0.5f, 0.0f);glEnd();则这两个点将分别被画出来。如果将GL_POINTS替换成GL_LINES,则两个点将被认为是直线的两个端点,OpenGL将会画出一条直线。我们还可以指定更多的顶点,然后画出更复杂的图形。另一方面,glBegin支持的方式除了GL_POINTS和GL_LINES,还有GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN等.我并不准备在glBegin的各种方式上大作文章。大家可以自己尝试改变glBegin的方式和顶点的位置,生成一些有趣的图案。程序代码:void myDisplay(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin( /* 在这里填上你所希望的模式 */ ); /* 在这里使用glVertex*系列函数 */ /* 指定你所希望的顶点位置 */ glEnd(); glFlush();}把这段代码改成你喜欢的样子,然后用它替换第一课中的myDisplay函数,编译后即可运行。两个例子例一、画一个圆/*正四边形,正五边形,正六边形,……,直到正n边形,当n越大时,这个图形就越接近圆当n大到一定程度后,人将无法把它跟真正的圆相区别这时我们已经成功的画出了一个“圆”(注:画圆的方法很多,这里使用的是比较简单,但效率较低的一种)试修改下面的const int n的,观察当n=3,4,5,8,,,,,等不同数时输出的变化情况将GL_POLYGON改为GL_LINE_LOOP、GL_POINTS等其它方式,观察输出的变化情况*/#include <math.h>const int n = ;const GLfloat R = 0.5f;const GLfloat Pi = 3.f;void myDisplay(void){ int i; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); for(i=0; i<n; i) glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i)); glEnd(); glFlush();}例二、画一个五角星/*设五角星的五个顶点分布位置关系如下: AE B D C首先,根据余弦定理列方程,计算五角星的中心到顶点的距离a(假设五角星对应正五边形的边长为.0)a = 1 / (2-2*cos(*Pi/));然后,根据正弦和余弦的定义,计算B的x坐标bx和y坐标by,以及C的y坐标(假设五角星的中心在坐标原点)bx = a * cos( * Pi/);by = a * sin( * Pi/);cy = -a * cos( * Pi/);五个点的坐标就可以通过以上四个量和一些常数简单的表示出来*/#include <math.h>const GLfloat Pi = 3.f;void myDisplay(void){ GLfloat a = 1 / (2-2*cos(*Pi/)); GLfloat bx = a * cos( * Pi/); GLfloat by = a * sin( * Pi/); GLfloat cy = -a * cos( * Pi/); GLfloat PointA[2] = { 0, a }, PointB[2] = { bx, by }, PointC[2] = { 0.5, cy }, PointD[2] = { -0.5, cy }, PointE[2] = { -bx, by }; glClear(GL_COLOR_BUFFER_BIT); // 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出 glBegin(GL_LINE_LOOP); glVertex2fv(PointA); glVertex2fv(PointC); glVertex2fv(PointE); glVertex2fv(PointB); glVertex2fv(PointD); glEnd(); glFlush();}例三、画出正弦函数的图形/*由于OpenGL默认坐标只能从-1到1,(可以修改,但方法留到以后讲)所以我们设置一个因子factor,把所有的坐标等比例缩小,这样就可以画出更多个正弦周期试修改factor的,观察变化情况*/#include <math.h>const GLfloat factor = 0.1f;void myDisplay(void){ GLfloat x; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glVertex2f(-1.0f, 0.0f); glVertex2f(1.0f, 0.0f); // 以上两个点可以画x轴 glVertex2f(0.0f, -1.0f); glVertex2f(0.0f, 1.0f); // 以上两个点可以画y轴 glEnd(); glBegin(GL_LINE_STRIP); for(x=-1.0f/factor; x<1.0f/factor; x=0.f) { glVertex2f(x*factor, sin(x)*factor); } glEnd(); glFlush();}小结本课讲述了点、直线和多边形的概念,以及如何使用OpenGL来描述点,并使用点来描述几何图形。大家可以发挥自己的想象,画出各种几何图形,当然,也可以用GL_LINE_STRIP把很多位置相近的点连接起来,构成函数图象。如果有兴趣,也可以去找一些图象比较美观的函数,自己动手,用OpenGL把它画出来。
OpenGL编程逐步深入(九)插值处理 注:文中VS代指顶点着色器,FS代指片段着色器。准备知识这个教程和大家展示3d管道中非常重要的部分,即Interpolation(插值)。光栅化程序执行的插值
OpenG: 光照 1.绘制带有光照效果的场景;2.场景包含3个茶壶,通过键盘1,2,3可以分别选中三个茶壶,然后用鼠标对每个茶壶进行分别的旋转;3.使用点光源,点光源
OpenGL教程翻译 第十七课 环境光(Ambient Lighting) OpenGL教程翻译第十七课环境光(AmbientLighting)原文地址:
标签: opengl入门教程(精)
本文链接地址:https://www.jiuchutong.com/biancheng/369588.html 转载请保留说明!友情链接: 武汉网站建设