原型的杂货铺首页

 
OpenGL编程(5)

 
发表新主题   回复主题    原型的杂货铺首页 -> 软件技术
阅读上一个主题 :: 阅读下一个主题  
作者 正文
klaaa
新手上路


加入时间: 2003/03/15
文章: 8

原币: 25

离线
文章时间: 2003-3-20 周四, 下午9:52    标题: OpenGL编程(5) 引用回复

OpenGL编程(5)

这次新东西不多,希望大家多看看例子,熟悉熟悉。
// OpenGL05.cpp

#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glut.h>
#include <math.h>

#define GL_PI 3.14159265359f
long g_lShape=0;

void DrawMyShapes(void)
{
long i=0;
GLfloat x=0,y=0,z=0;

switch(g_lShape)
{
case 0:
glBegin(GL_POINTS);
glVertex3f(0.0f,0.0f,0.0f);
glEnd();
glBegin(GL_POINTS);
for(i=0;i<180;i++)
{
x=50.0f*(GLfloat)cos(i*5.0f*GL_PI/180.0f);
y=50.0f*(GLfloat)sin(i*5.0f*GL_PI/180.0f);
z=i*0.5f;
glVertex3f(x,y,z);
}
glEnd();
break;
case 1:
glBegin(GL_POINTS);
glVertex3f(0.0f,0.0f,0.0f);
glEnd();
glBegin(GL_LINE_STRIP);
for(i=0;i<180;i++)
{
x=50.0f*(GLfloat)cos(i*5.0f*GL_PI/180.0f);
y=50.0f*(GLfloat)sin(i*5.0f*GL_PI/180.0f);
z=i*0.5f;
glVertex3f(x,y,z);
}
glEnd();
break;
}
}

void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glColor3f(0.0f,1.0f,0.0f);
DrawMyShapes();
glFinish();
glutSwapBuffers();
}

void ResetViewport(GLsizei width,GLsizei height)
{
if(height==0)height=1;
if(width==0)width=1;
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-100.0f,100.0f,-100.0f,100.0f,-100.0f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void RotateScene(int key,int x,int y)
{
static GLfloat xRot=0,yRot=0;
GLfloat RotStep=5.0f;
if(key==GLUT_KEY_LEFT)yRot-=RotStep;
if(key==GLUT_KEY_RIGHT)yRot+=RotStep;
if(key==GLUT_KEY_UP)xRot+=RotStep;
if(key==GLUT_KEY_DOWN)xRot-=RotStep;

if(key==GLUT_KEY_F1)g_lShape=0;
if(key==GLUT_KEY_F2)g_lShape=1;

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(xRot,1.0f,0.0f,0.0f);
glRotatef(yRot,0.0f,1.0f,0.0f);

glutPostRedisplay();
}

void InitializeRC(void)
{
glClearColor(0.0f,0.0f,1.0f,1.0f);
}

void TerminateRC(void)
{
// nothing to do
}

int main(void)
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
glutCreateWindow("OpenGL05");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ResetViewport);
glutSpecialFunc(RotateScene);
InitializeRC();
glutMainLoop();
TerminateRC();
return 0;
}
本例使用方向键和F1,F2键可以进行控制,大家看看吧。


GLfloat是OpenGL的数据类型,代表浮点数。

glBegin的参数决定了图元类型,下面给glBegin支持的图元:
GL_POINTS:创建单个的点。
GL_LINES:创建线段,每两点为一条线段,如果点的数量为单数,则忽略最后一个点。
GL_LINE_STRIP:创建折线条,即将各个点顺次连接起来。
GL_LINE_LOOP:创建首尾相连的折线条,同GL_LINE_STRIP相似,不过在第一个点和最后一个点之间多了一条线段。典型情况下,可以用来绘制GL_POLYGON不能处理的封闭区域。
GL_TRIANGLES:创建三角形,每三个点成为一个三角形,多余的不足三个的点将被忽略。
GL_TRIANGLE_STRIP:创建三角形条,每相邻三个点组成三角形,例如,123为一个三角形,234为下一个三角形。
GL_TRIANGLE_FAN:创建三角扇形,第一个点充当原点,其余每相邻两点同原点组成三角形,例如,123、134、145这样组成三角形。
GL_QUADS:创建四边形,每四点组成一个四边形,多余的点将被忽略。
GL_QUAD_STRIP:创建四边形条,即所有点两两一组,每相邻两组组成一个四边形,例如1234、3456、5678这样组成四边形。通常情况下较少使用。
GL_POLYGON:创建凸多边形。要求各点连接图形的边缘不能相交,通常情况下较少使用。

大家可以自己试试使用各种参数来绘图,多多熟悉,这次就到这里了。

klaaa, 2003.03.20.
返回顶端
阅读会员资料 发送站内短信
显示文章:   
发表新主题   回复主题    原型的杂货铺首页 -> 软件技术 所有的时间均为 北京时间
1页,共1

 
论坛转跳:  
不能在本论坛发表新主题
不能在本论坛回复主题
不能在本论坛编辑自己的文章
不能在本论坛删除自己的文章
不能在本论坛发表投票
不能在这个论坛添加附件
可以在这个论坛下载文件


Powered by phpBB 2.0.3 © 2001, 2002 phpBB Group
中文phpBB开发小组提供技术支持