WEB开发网
开发学院软件开发VC 基于VC++的OpenGL编程讲座之坐标变换 阅读

基于VC++的OpenGL编程讲座之坐标变换

 2010-06-23 20:41:12 来源:WEB开发网   
核心提示:附加平面裁剪函数为:1、void glClipPlane(GLenum plane,Const GLdouble *equation);函数参数equation指向一个拥有四个系数值的数组,这四个系数分别是裁剪平面Ax+By+Cz+D=0的A、B、C、D值,基于VC++的OpenGL编程讲座之坐标变换(6),因此,由这

附加平面裁剪函数为:

1、void glClipPlane(GLenum plane,Const GLdouble *equation);

函数参数equation指向一个拥有四个系数值的数组,这四个系数分别是裁剪平面Ax+By+Cz+D=0的A、B、C、D值。因此,由这四个系数就能确定一个裁剪平面。参数plane是GL_CLIP_PLANEi(i=0,1,...),指定裁剪面号。

在调用附加裁剪函数之前,必须先启动glEnable(GL_CLIP_PLANEi),使得当前所定义的裁剪平面有效;当不再调用某个附加裁剪平面时,可用glDisable(GL_CLIP_PLANEi)关闭相应的附加裁剪功能。

下面这个例子不仅说明了附加裁剪函数的用法,而且调用了gluPerspective()透视投影函数,读者可以细细体会其中的用法。例程如下:

#include "glos.h"

#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glaux.h>

void myinit(void);

void CALLBACK myReshape(GLsizei w, GLsizei h);

void CALLBACK display(void);

void CALLBACK display(void)

{

GLdouble eqn[4] = {1.0, 0.0, 0.0, 0.0};

glClear(GL_COLOR_BUFFER_BIT);

glColor3f (1.0, 0.0, 1.0);

glPushMatrix();

glTranslatef (0.0, 0.0, -5.0);

/* clip the left part of wire_sphere : x<0 */

glClipPlane (GL_CLIP_PLANE0, eqn);

glEnable (GL_CLIP_PLANE0);

glRotatef (-90.0, 1.0, 0.0, 0.0);

auxWireSphere(1.0);

glPopMatrix();

glFlush();

}

void myinit (void)

{

glShadeModel (GL_FLAT);

}

void CALLBACK myReshape(GLsizei w, GLsizei h)

{

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);

glMatrixMode(GL_MODELVIEW);

}

void main(void)

{

auxInitDisplayMode (AUX_SINGLE | AUX_RGB);

auxInitPosition (0, 0, 500, 500);

auxInitWindow ("Arbitrary Clipping Planes");

myinit ();

auxReshapeFunc (myReshape);

auxMainLoop(display);

}

上一页  1 2 3 4 5 6 7  下一页

Tags:基于 VC OpenGL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接