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,否则会出现不可预知的错误。
大家自己试试吧,现在已经可以绘制出很好的二维图形了。本例结束。 |
|