学习OpenGL(三)绘制螺旋状图形

学习OpenGL(三)绘制螺旋状图形

[email protected]

http://blog.csdn.net/kezunhai

在OpenGl中,图形都是有一些基本的图元组成的,图元是把一组定点或顶点列表解释为屏幕上绘制的某些图形,OpenGL中的最小图元就是点。在OpenGL中有10中图元,可以实现从空间中绘制的简单的点到任意变数的封闭多边形,这十种图元分别是:

绘制图形的格式如下:

glBegin("图元类型");
	glVertex3f(GLfloat x, GLfloat y, GLfloat z);
	glVertex3f(GLfloat x, GLfloat y, GLfloat z);
	glVertex3f(GLfloat x, GLfloat y, GLfloat z);
	......
glEnd();

下面以一个实例来说明点的绘制,该实例运用三角形的原理绘制一系列简单的点,这些点沿着Z轴上升,形成一个螺旋状的形状。整个实例的源代码如下:

#include "stdafx.h"
#include <gl/glut.h>
#include <cmath>
#include <iostream>
using namespace std;

#ifndef GL_PI
#define  GL_PI 3.14159
#endif

GLfloat xRot = 45.0f;
GLfloat yRot = 30.0f;

void SetupRC_GRAPHIC(void)
{
	// black background
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

	// Set drawing color to Green
	glColor3f(1.0f, 1.0f, 0.0f);
}

// Called to draw scene
void RenderScene_GRAPHIC(void)
{
	GLfloat X, Y, Z, angle;

	GLfloat fR = 50.0f;

	// Clear the window with current color
	glClear(GL_COLOR_BUFFER_BIT);

	// Save matrix state and do the rotation
	glPushMatrix();

	// Rotate
	glRotatef(xRot, 1.0f, 0.0f, 0.0f);
	glRotatef(yRot, 0.0f, 1.0f, 0.0f);

	glBegin(GL_POINTS);
		Z = -fR;
		for ( angle = 0.0f; angle<=2.0f*GL_PI*5.0f; angle+=0.1f) // 5圈
		{
			X = fR * sin(angle);
			Y = fR * cos(angle);

			glVertex3f(X, Y, Z);
			Z += 0.5;
		}

	glEnd();

	// restore transformations
	glPopMatrix();

	// Flush drawing commands
	glFlush();
}

// called by GLUT library when the window has changed size
void ChangeSize_GRAPHIC(GLsizei w, GLsizei h)
{
	GLfloat nRange = 100.0f;
	if ( h ==0)
		h = 1;

	// Set Viewport to window dimensions
	glViewport(0, 0, w, h);

	// Reset coordinate system
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

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

int _tmain(int argc, char* argv[])
{
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glutCreateWindow("Graphics");	

	glutDisplayFunc(RenderScene_GRAPHIC);
	glutReshapeFunc(ChangeSize_GRAPHIC);

	SetupRC_GRAPHIC();
	glutMainLoop();

	return 0;
}

上面代码中首先采用glOrtho()函数来建立修剪空间,当窗口发生变化时,ChangeSize()函数就会对视见区做一些调整。而在渲染函数RenderScene_GRAPHIC()中,通过计算某个角度的X、Y值(在0~PI之间循环了5次),并采用glVertex3f进行绘制,最终效果如图所示:

作者:kezunhai出处:http://blog.csdn.net/kezunhai欢迎转载或分享,但请务必声明文章出处。

学习OpenGL(三)绘制螺旋状图形

时间: 2024-07-30 09:28:14

学习OpenGL(三)绘制螺旋状图形的相关文章

[Swift通天遁地]八、媒体与动画-(5)使用开源类库绘制文字、图形、图像、图表、SVG

本文将演示如何通过金刚鹦鹉的类库,进行文字.图像.图表和图形的绘制. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, '9.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod "Macaw" 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文件

opengl基础学习专题 (三) 多边形绘制的几种样式

题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向您致敬,愿您仍在天国 仍潇洒的思索着,奔跑着. 正文 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处. 例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成. 这些问题将在本课中被解决. 下面就点.直

matlab学习笔记第三章——绘图与图形

1.在MATLAB中绘图包含下面三个步骤: a.定义函数 b.指定要绘制的函数图形的值范围 c.调用MATLAB的plot(x, y)函数 例:>> x = [0:0.1:10]; >> y = cos(x); >> plot(x, y) 2.绘制一个坐标轴有标签的图象,这可以通过xlabel和ylabel函数做到: >> x = [0:0.01:10]; >> y = cos(x); >> plot(x, y), xlabel('x

OpenGL学习笔记3 —— 绘制3D物体、鼠标交互、反向变换

/* reference http://nehe.gamedev.net/article/using_gluunproject/16013/ */ #include <windows.h> // windows系统要加这个.因为下面2个头文件的一些宏是在这个文件中定义的 #include <gl/Gl.h> #include <gl/glut.h> //这两个头文件在OpenGL程序中几乎必加. #include <cstdio> //标准输入输出,用来打印

7天学习opengl入门

http://blog.csdn.net/slience_perseverance/article/details/8096233 10月13号下午3:00队长给我开了一个会,10.14号开始学习opengl 今天10月21号,期间,虽然有时候课程很满,但每天都至少写一个程序. 当然,这些只是我7天来业余时间的学习,我觉得这个网址不错,大家如果也想学习opengl,并且具有一定的C语言C++基础,入门课程推荐大家去学习这个网址http://www.cnblogs.com/crazyxiaom/a

[转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND

原文:cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND 上一篇文章介绍了cocos2d-x的基本渲染结构,这篇顺着之前的渲染结构介绍渲染命令QUAD_COMMAND命令的部分,通过这部分的函数,学习opengl处理图片渲染的方法,首先介绍这节需要涉及到的基本概念VAO和VBO. VAO和VBO: 顶点数组对象(Vertex Array Object  即VAO)是一个包含一个或数个顶点缓冲区对象(Vertex Buffer Object, 即

通过 Autostereograms 案例学习 OpenGL 和 OpenCL 的互操作性

引言 在过去的十年里, GPU (图形处理单元)已经从特殊硬件(特供)转变成能够在数值计算领域开辟新篇章的高性能计算机设备. 很多算法能够使用拥有巨大的处理能力的GPU来快速运行和处理大数据量.即使在通常的情况下,不可能将图形硬件编程化, 图形硬件也能够加快算法与图像的处理. 举个样例:通常情况下能够用来计算图形差分,模糊图像, 合并图像,甚至是进行图像(或数组)平均值计算. 随后,可编程方式的出现给编程者带来了极大的便利. 可编程方式所提供的新的可能性,更广泛类别的算法能够移植到GPU来运行.

cocos2D-X源码讲解之从cocos2D-X学习OpenGL(1)----cocos2D-X渲染结构

 个人原创,欢迎转载,转载请注明原文地址http://blog.csdn.net/bill_man 从本篇文章开始,将分析cocos2D-X 3.0源代码,第一部分是从cocos2D-X学习OpenGL,也就是分析cocos2D-X 3.0的渲染代码,本篇首先介绍cocos2D-X 3.0的渲染结构,使用的是3.0正式版. void DisplayLinkDirector::mainLoop() { if (_purgeDirectorInNextLoop) { //只有一种情况会调用到这里来,

基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)

在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时,我们还会介绍VBO(顶点缓冲区对象)和VAO(顶点数组对象)的基本用法. 在编写自己的shader之前,我觉得有必要提一下OpenGL渲染管线. 理解OpenGL渲染管线,对于学习OpenGL非常重要.下面是OpenGL渲染管线的示意图:(图中淡蓝色区域是可以编程的阶段) 此图是从wiki中拿过来的