glClipPlane函数
2016-06-01 13:04
393 查看
1.OGL 一般最多支持6个裁剪平面。glGetIntegerv(GL_MAX_CLIP_PLANES, &clipPlanes);
2.裁剪平面是在视图空间中进行计算的,而不是裁剪空间中,和通常的视锥体裁剪,图像裁剪不同;所以如果是正交投影,裁剪平面也是在3D视图坐标系中裁剪。
3.平面的方程为Ax + By + Cz + (- D)= 0 等于VecP * VecNormal + (-D) = 0,glClipPlane中定义的平面就是:
GLdouble eqn[4] = {0.0, -1.0, 0.0, 0.0}; A, B, C的定义是VecNormal上的平面,x,y, z却是平面上的点,D是平面上到原点距离的相反数。
4.法向量(A,B,C)指向的方向是平面的正方向,裁剪出来的空间也是法向量指向的空间,多个裁剪平面相互裁剪下是他们裁剪出来的空间的交集。
实例代码:
2.裁剪平面是在视图空间中进行计算的,而不是裁剪空间中,和通常的视锥体裁剪,图像裁剪不同;所以如果是正交投影,裁剪平面也是在3D视图坐标系中裁剪。
3.平面的方程为Ax + By + Cz + (- D)= 0 等于VecP * VecNormal + (-D) = 0,glClipPlane中定义的平面就是:
GLdouble eqn[4] = {0.0, -1.0, 0.0, 0.0}; A, B, C的定义是VecNormal上的平面,x,y, z却是平面上的点,D是平面上到原点距离的相反数。
4.法向量(A,B,C)指向的方向是平面的正方向,裁剪出来的空间也是法向量指向的空间,多个裁剪平面相互裁剪下是他们裁剪出来的空间的交集。
实例代码:
/* * Copyright (c) 1993-2003, Silicon Graphics, Inc. * All Rights Reserved * * Permission to use, copy, modify, and distribute this software for any * purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright * notice and this permission notice appear in supporting documentation, * and that the name of Silicon Graphics, Inc. not be used in * advertising or publicity pertaining to distribution of the software * without specific, written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" AND * WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, LOSS OF * PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD * PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF * THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE * OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor clauses * in the FAR or the DOD or NASA FAR Supplement. Unpublished - rights * reserved under the copyright laws of the United States. * * Contractor/manufacturer is: * Silicon Graphics, Inc. * 1500 Crittenden Lane * Mountain View, CA 94043 * United State of America * * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. */ /* * clip.c * This program demonstrates arbitrary clipping planes. */ #include <GL/glut.h> /*#include <stdlib.h> */ void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT); GLint clipPlanes; // 6,OGL中一般也是最多支持6个裁剪平面 glGetIntegerv(GL_MAX_CLIP_PLANES, &clipPlanes); } void display(void) { GLdouble eqn[4] = {0.0, 1.0, 0.0, -.5}; GLdouble eqn2[4] = {1.0, 0.0, 0.0, 0.0}; glClear(GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glPushMatrix(); glTranslatef (0.0, 0.0, -5.0); /* clip lower half -- y < 0 */ //glRotatef(45, 1, 0, 0); glClipPlane (GL_CLIP_PLANE0, eqn); glEnable (GL_CLIP_PLANE0); /* clip left half -- x < 0 */ glClipPlane (GL_CLIP_PLANE1, eqn2); glEnable (GL_CLIP_PLANE1); glRotatef (90.0, 1.0, 0.0, 0.0); glutWireSphere(1.0, 20, 16); glPopMatrix(); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode (GL_MODELVIEW); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }
相关文章推荐
- 排序算法(一):冒泡排序
- 歪谈AndroidManifest
- 关于xib中要TableviewCell的自定义心得
- Mysql 只修改日期的年月日
- CoordinateLayout的使用如此简单
- 个人杂记
- 图论之次小题型
- python ORM
- Error:(320, 57) java: -source 1.6 中不支持 diamond 运算符
- 未能将网站配置为使用ASP.NET4.X 解决方法
- POJ 3252 Round Numbers(数学问题)
- SetForegroundWindow Win32-API not always works on Windows-7
- OOX 面向对象X
- android获取网页数据的方法
- 安装llvm3.8.0时遇到的问题,FAILED: lib/libLTO.so or FAILED: lib/libclang.so.3.8
- 数据结构_P1
- ORACLE 物化视图一
- [zynq] zynq7000开发流程之SDK操作
- 贪心算法小白の人品测试
- tomcat的配置和优化