原型的杂货铺首页

 
OpenGL编程(3)

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


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

原币: 25

离线
文章时间: 2003-3-18 周二, 下午1:31    标题: OpenGL编程(3) 引用回复

OpenGL编程(3)

这次开始绘制基本图元:点,线,三角形,矩形等等。

首先,OpenGL对于任何输入只接受顶点,所以对于不同类型的图元,必须要告诉OpenGL使用什么类型,需要调用的函数是glBegin和glEnd。它们成对出现,不能嵌套,对于这一点一定要注意。下面通过看例子来学习使用glBegin和glEnd。

第三个例子源代码如下:

// OpenGL03.cpp

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

void RenderScene(void)
{
glClearColor(0,0,1,1);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0f,1.0f,0.0f);
glBegin(GL_POINTS);
glVertex3f(0.0f,10.0f,0.0f);
glVertex3f(10.0f,10.0f,0.0f);
glVertex3f(10.0f,0.0f,0.0f);
glEnd();

glColor3f(1.0f,1.0f,0.0f);
glBegin(GL_LINES);
glVertex3f(0.0f,20.0f,0.0f);
glVertex3f(20.0f,20.0f,0.0f);
glVertex3f(20.0f,-10.0f,0.0f);
glVertex3f(0.0f,0.0f,0.0f);
glEnd();

glBegin(GL_TRIANGLES);
glVertex3f(-20.0f,20.0f,0.0f);
glVertex3f(-10.0f,20.0f,0.0f);
glVertex3f(-20.0f,-10.0f,0.0f);
glEnd();

glColor3f(1.0f,0.0f,0.0f);
glBegin(GL_QUADS);
glVertex3f(50.0f,70.0f,0.0f);
glVertex3f(60.0f,70.0f,0.0f);
glVertex3f(60.0f,80.0f,0.0f);
glVertex3f(50.0f,80.0f,0.0f);
glEnd();

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,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

int main(void)
{
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
glutCreateWindow("OpenGL03");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ResetViewport);
glutMainLoop();
return 0;
}

相对于第二个例子,只有RebderScene函数做了一些改变,所以下面的讲述只包括这些部分。
在函数RebderScene中:
glColor3f(0.0f,1.0f,0.0f);
glBegin(GL_POINTS);
glVertex3f(0.0f,10.0f,0.0f);
glVertex3f(10.0f,10.0f,0.0f);
glVertex3f(10.0f,0.0f,0.0f);
glEnd();
首先设置颜色为绿色,然后使用glBegin(GL_POINTS)告诉OpenGL下面输入的图元为点,接着使用glVertex3f输入三个点,注意每次输入的点都是三维坐标的,最后使用glEnd告诉OpenGL这次图元操作完毕。

接下来的代码中,出现过
glBegin(GL_LINES);
......
glEnd();

glBegin(GL_TRIANGLES);
......
glEnd();

glBegin(GL_QUADS);
......
glEnd();
这里分别是使用不同的图元,GL_LINES对应着线段,GL_TRIANGLES对应着三角形,GL_QUADS对应着矩形,注意一下,OpenGL中的三角形和矩形都是有法线正方向的,组成它们的顶点的旋转方向按右手正交所得的法线方向既是正方向。当然,现在暂时还用不上这个。
glBegin和glEnd中可以使用glColor3f修改颜色,还可以改变一些其它的属性,但是一定不能嵌套,即出现另外一组glBegin和glEnd,否则会出现不可预知的错误。

大家自己试试吧,现在已经可以绘制出很好的二维图形了。本例结束。
返回顶端
阅读会员资料 发送站内短信
显示文章:   
发表新主题   回复主题    原型的杂货铺首页 -> 软件技术 所有的时间均为 北京时间
1页,共1

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


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