用opengl生成螺旋线算法

转载 2013年12月03日 10:38:13
// test01.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include <gl/glut.h>
#include <math.h>
#define GL_PI 3.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 points
/*glBegin(GL_POINTS);*/
glBegin(GL_LINE_STRIP);
z = -50.0f;
for(angle = 0.0f; angle <= (2.0f*GL_PI)*3.0f; angle += 0.1f)
{
x = 50.0f*sin(angle);
y = 50.0f*cos(angle);

// Specify the point and move the Z value up a little
glVertex3f(x, y, z);
z += 0.5f;
}

// Done drawing points
glEnd();

// Restore transformations
glPopMatrix();

// Flush drawing commands
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);
}


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();
}




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 projection matrix stack
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);

// Reset Model view matrix stack
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}


int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Points Example");
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys);
glutDisplayFunc(RenderScene);
SetupRC();
glutMainLoop();

return 0;
}


相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

螺线与螺旋线

螺线与螺旋线 1.在平面极坐标系中,如果极径ρ随极角θ的增加而成比例增加(或减少),这样的动点所形成的轨迹叫做螺线。 2.螺旋线按维度分有:二维螺旋线、三维螺旋线。 二维螺旋线:也就是螺线。(阿基米德...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

计算机图形学(二)输出图元_20_章节总结_程序展示_蜗形线、心形线、螺旋线

蜗形线、心形线、螺旋线          最后一个程序显示了圆公式的某些变化,其中使用了参数极坐标方程(3.28)来计算曲线路径的点。这些点用做显示弧的逼近折线中直线段的端点。图3.70中的弧通过圆半...

OpenGL 绘制螺旋线

1.如图: 2.代码/** * @描述 使用opengl绘制螺旋线 * @项目名称 App_OpenGL * @包名 com.android.opengl * @类名 SpiralMai...
  • lovoo
  • lovoo
  • 2016年05月15日 22:17
  • 628

生成螺旋线形状的随机点

#include #include #include #include #define PI 3.1415926535 void generate_spiral(); int size_of_p...

OpenGL画蜗型线、心形线、三叶曲线、四叶曲线、螺旋线

这里讲的是一些有趣而美丽的曲线,蜗型线、心形线、三叶曲线、四叶曲线、螺旋线等,都是由圆公式的一些特殊的变化带来的,我们使用了参数极坐标方程来计算曲线路径的点,这些点用做显示弧的逼近折现中直线段的端点。...

OpenGL画蜗型线、心形线、三叶曲线、四叶曲线、螺旋线

这里讲的是一些有趣而美丽的曲线,蜗型线、心形线、三叶曲线、四叶曲线、螺旋线等,都是由圆公式的一些特殊的变化带来的,我们使用了参数极坐标方程来计算曲线路径的点,这些点用做显示弧的逼近折现中直线段的端点。...

android绘制一个圆柱的螺线曲线

好吧,其实这个问题是因为我想做一个小玩意的时候想要做一个效果需要用到螺线的一个效果,但是没人分享过,可能太简单了‘, 但是我是菜鸟,所以自己搞了两天,写了一个能实现的代码,有点乱,不过有注释,其实也...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用opengl生成螺旋线算法
举报原因:
原因补充:

(最多只允许输入30个字)