opengl学习笔记(五)——绘制复杂图形

本小节的代码参考了

http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html里的内容。

1、用正多边形模拟一个圆,主要思想是求出把圆n等分的各个顶点坐标,然后连线即可。第一个顶点的坐标为(R,0)。

核心代码如下:

#include <math.h>
const int n = 20;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;
void display(void)
{
     int i;
     glClear(GL_COLOR_BUFFER_BIT);
     glBegin(GL_LINE_LOOP);
     for(i=0; i<n; ++i)
         glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
     glEnd();
     glFlush();
}

下图1是n=20的结果。


下图2是n=200的结果


2、画一个五角星,效果如下所示


代码思路是设正五边形边长为1。

圆半径为R,圆心O为坐标原点,

显然有R=0.5/sin36°;

第一个顶点A的坐标为(0,R),

B点的横坐标bx=R*cos18°,纵坐标by=R*sin18°

C点的横坐标cx=1/=0.5,纵坐标cy=-R*sin54°

DE两点和BC关于y轴对称,所以最终的代码如下:

#include <math.h>
const GLfloat Pi = 3.1415926536f;
const GLfloat arc= Pi/180;  //1度角所对应的弧度
void display(void)
{
	const GLfloat r = 0.5f/sin(36 * arc) ;
	GLfloat bx = r * cos(18 * arc);
	GLfloat by = r * sin(18 * arc);
	GLfloat cx = 0.5f;
	GLfloat cy = -r * sin(54 * arc);
	//各定点坐标
	GLfloat
		A[2] = { 0, r },
		B[2] = { bx, by },
		C[2] = { cx, cy },
		D[2] = { -cx, cy },
		E[2] = { -bx, by };
	
	// 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_LINE_LOOP);
	glColor3f(1.0, 0.0, 0.0);
	glVertex2fv(A);
	glVertex2fv(C);
	glVertex2fv(E);
	glVertex2fv(B);
	glVertex2fv(D);
	glEnd();
	glFlush();
}
3、画正弦函数图形
代码如下:

/*
由于OpenGL默认坐标值只能从-1到1,(可以修改,但方法留到以后讲)
所以我们设置一个因子factor,把所有的坐标值等比例缩小,
这样就可以画出更多个正弦周期
试修改factor的值,观察变化情况
*/
#include <math.h>
const GLfloat factor = 0.1f;  //缩放因子,将普通正弦函数的图像缩小10倍画到屏幕上。
void display(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.01f)
	{
		glVertex2f(x*factor, sin(x)*factor);
	}
	glEnd();
	glFlush();
}
运行结果如下:



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于绘制多边形,我会为您提供一些OpenGL学习笔记。 首先,我们需要了解一下OpenGL绘制多边形的基本流程。OpenGL绘制多边形的过程包括三个基本步骤:指定顶点数据、指定绘制方式和执行绘制。 指定顶点数据:在OpenGL中,我们可以使用glVertex等函数来指定多边形的顶点。例如,如果我们要绘制一个三角形,我们可以使用以下代码: ``` glBegin(GL_TRIANGLES); glVertex3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd(); ``` 其中,glBegin和glEnd函数用来指定绘制的方式,GL_TRIANGLES表示绘制三角形。glVertex3f函数用来指定三角形的三个顶点,每个顶点由三个坐标值组成。 指定绘制方式:OpenGL支持多种绘制方式,例如GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN等。在上面的代码中,我们使用了GL_TRIANGLES来指定绘制三角形的方式。 执行绘制:最后,我们需要调用glDrawArrays函数来执行绘制。例如,如果我们要绘制一个三角形,我们可以使用以下代码: ``` glDrawArrays(GL_TRIANGLES, 0, 3); ``` 其中,GL_TRIANGLES表示绘制三角形的方式,0表示顶点数组的起始位置,3表示顶点的数量。 以上就是OpenGL绘制多边形的基本流程,下面我们来看一下如何绘制着色多边形。 绘制着色多边形的过程与绘制普通多边形的过程基本相同,只需要在绘制前调用glColor函数来指定颜色即可。例如,如果我们要绘制一个红色的三角形,我们可以使用以下代码: ``` glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); // 指定颜色为红色 glVertex3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd(); ``` 其中,glColor3f函数用来指定颜色,三个参数分别表示红、绿、蓝三个颜色通道的值,取值范围为0到1。 希望以上内容能够帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值