`
hereson3
  • 浏览: 159942 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

OpenGL曲线绘制:线段

阅读更多

以线段方式绘制曲线。例如:正弦曲线。
 glBegin(GL_LINE_STRIP);
 for(i=0;i<POINTNUM;i++)
 {
  glVertex2f(XSTART+i*XSTEP*XSCALE, YSTART+sin(i*XSTEP)*XSCALE);
 }
 glEnd();
说明:XSTEP是横坐标点的间隔。XSCALE是为了适应屏幕大小,将图形放大。XSTART,YSTART是将曲线起点移动到左下角。

附:源码

///////////////////////////// 主程序 ///////////////////////////
// 等价无穷小的曲线绘制

#include "stdafx.h"

#include "windows.h"
#include "gl/gl.h"
#include "gl/glu.h"
#include "gl/glaux.h"
#include "conio.h"
#include "math.h"
#include "math01.h"

#define XSTEP (3.14/40)
#define POINTNUM 30
#define XSCALE 10
#define XSTART -10
#define YSTART -10

void DrawPoint2(GLfloat x, GLfloat y);
void CALLBACK myReshape(GLsizei w,GLsizei h);
void CALLBACK display(void);

int main(int argc, char* argv[])
{
 auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
 auxInitPosition(0,0,500,500);
 auxInitWindow("simple");
 
 glClearColor(0.0,0.0,0.0,0.0);
 glClear(GL_COLOR_BUFFER_BIT);

 auxReshapeFunc(myReshape);
 auxMainLoop(display);
 return 0;
}

void DrawPoint2(GLfloat x, GLfloat y)
{
 glBegin(GL_POINTS);
 glVertex2f(x,y);
 glEnd();
}

void CALLBACK myReshape(GLsizei w,GLsizei h)
{
 glViewport(0,0,w,h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 if(w<=h)
  glOrtho(-15,15,-15*(GLfloat)h/(GLfloat)w,
   15*(GLfloat)h/(GLfloat)w,-10.0,10.0);
 else
  glOrtho(-15*(GLfloat)h/(GLfloat)w,
   15*(GLfloat)h/(GLfloat)w,-15,15,-10.0,10.0);

 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}


void CALLBACK display(void)
{
 int i;

 glColor3f(0.0,0.1,0.0);
 glRectf(-14,-14,14,14);

 // 两条坐标
 glColor3f(0.0,1.0,0.0);
 for(i=0;i<POINTNUM;i++)
 { 
  DrawPoint2(YSTART+i*XSTEP*XSCALE, XSTART);
 }
 for(i=0;i<POINTNUM;i++)
 { 
  DrawPoint2(XSTART,YSTART+i*XSTEP*XSCALE);
 }

 //sin
 glBegin(GL_LINE_STRIP);
 glColor3f(1.0,0.0,0.0);
 for(i=0;i<POINTNUM;i++)
 {
  glVertex2f(XSTART+i*XSTEP*XSCALE,
   YSTART+sin(i*XSTEP)*XSCALE);
 }
 glEnd();

 //y=x
 glBegin(GL_LINE_STRIP);
 glColor3f(1.0,1.0,0.0);
 for(i=0;i<POINTNUM;i++)
 {
  glVertex2f(XSTART+i*XSTEP*XSCALE,
   YSTART+(i*XSTEP)*XSCALE);
 }
 glEnd(); 
 //y=e(x)
 glBegin(GL_LINE_STRIP);
 glColor3f(1.0,0.0,0.5);
 for(i=0;i<POINTNUM;i++)
 {
  glVertex2f(XSTART+i*XSTEP*XSCALE,
   YSTART+(E_Exp(i*XSTEP)-1)*XSCALE);
 }
 glEnd();

 glFlush(); 
}

///////////////////////////// 头文件 /////////////////////
//math01.h
//数学计算公式

#ifndef MYMATH01_H
#define MYMATH01_H

//x的n次方
float Mul(float x,int n);
int Jie(int n);
float E_Exp(float x);

float Mul(float x,int n)
{
 int i=0;
 float k=1;

 if(0==n)
  return 1;
 for(i=0;i<n;i++)
 {
  k*=x;
 }
 return k;
}

//n的阶乘
int Jie(int n)
{
 int k=1;

 if(0==n)
  return 1;
 for(;n>0;n--)
 {
  k*=n;
 }
 return k;

}

//e的x次方 麦克劳林级数,没有余项
float E_Exp(float x)
{
 int i;
 float sum=0;

 for(i=0;i<20;i++)
 {
  sum+=Mul(x,i)/Jie(i);
 }
 return sum;

}

#endif

分享到:
评论

相关推荐

    基于OpenGL实现曲线_曲面的绘制.pdf

    用线段和小多边形近似绘制曲线和曲面要精确的 多,并且可以节省大量的存储空间和计算时间。 1 Bezier 曲线的数学描述 在空间给定n + 1 个点P0 , P1 , P2 ,. . . , Pn ,下 列参数曲线为n 次Bezier 曲线: P( u) = 6 n i...

    OpenGL 向bezier填充指定纹理

    使用opengl 绘制特殊bezier,并在曲线区域内填充纹理

    OpenGL实现贝塞尔曲线或曲面

    贝塞尔曲线和曲面:OpenGL只能直接绘制基本图元,对于曲线和曲面我们一般采用一系列线段或多边形来模拟的,这样当线段或多边形增多时必定很耗性能。其实对于这种曲线和曲面,我们可以使用一些控制点,通过求值器程序...

    qt QOpenGLWidget QGLWidget 描画线段

    在QT 框架下, 描画线段。 工作原理: 根据两点扩展成面,进行描画。

    OpenGL 系统开发的源代码

    2.1.3 线段的绘制 2.1.4 多边形的绘制 2.1.5 规则三维物体绘制函数 2.1.6 实例介绍 2.2 曲线与曲面绘制 2.2.1 曲线的基本理论 2.2.2 样条曲线的绘制 2.2.3 样条曲面的绘制 2.2.4 NURBS曲线和曲面...

    交互式计算机图形学基于OpenGL的自顶向下(第五版).pdf

    《交互式计算机图形学:基于OpenGL的自顶向下方法(第5版)(英文版)》覆盖了计算机图形学基础课程中的所有主题,包括光与材质的相互作用、明暗绘制、建模、曲线和曲面、反走样、光栅化、纹理映射和图像合成等内容。...

    计算机图形学OpenGL、codeblock、计算机图形学综合性实验

    1.1实现绘制Bresenham直线 运用Bresenham算法,通过点绘制实现直线。...通过Bezier算法和三次B样条算法实现绘制曲线。 1.6画图 实现画直线,闭合多边形,填充多边形。 1.7清屏 清除控制台和颜色缓冲。

    Android 游戏开发中绘制游戏触摸轨迹的曲线图

    任何无规则的曲线实际上都是由若干条线段组成,而线段的定义为两点之间最短的一条线。path类就 可以记录这两点之间的轨迹,那么若干个Path 就是我们须要绘制的无规则曲线。  下面介绍一下API 中path类设置轨迹路径...

    Android 3D游戏开发技术宝典-OpenGL ES 2.0 (吴亚峰) 源代码

    5.4.2 点与线段绘制方式 157 5.4.3 三角形条带与扇面绘制方式 159 5.4.4 顶点法与索引法 165 5.5 设置合理的视角 167 5.6 卷绕和背面剪裁 173 5.6.1 基本知识 173 5.6.2 一个简单的案例 174 ...

    计算机图形学教程含练习题pdf格式的

    主要内容和课时分配 一图形系统综述2 课时 主要介绍视频显示设备 二基本图元的显示 1 画线算法2 课时 DDA 算法Bresenham 算法中点算法* ...2 2 圆生成算法1 课时 DDA 算法* 正负法* Bresenham 算法* ...十二OpenGL 与VRML*

    北交《计算机图形学》在线作业(1)-参考资料.docx

    北交《计算机图形学》在线作业(1)-参考资料全文共10页,当前为第1页。北交《计算机图形学》在线作业(1)-参考资料全文共10页,当前为第1页。... D 使用Freehand工具绘制的线段 12 下列关于Bezier曲线的性质,哪个是

Global site tag (gtag.js) - Google Analytics