opengl 裁剪平面


原帖地址:http://blog.sina.com.cn/s/blog_5ff6097b0100xqvr.html

  1. void glClipPlane(GLenum plane, const GLdouble *equation); 

    定義一個裁剪平面。equation參數指向平面方程Ax + By + Cz + D = 0的4個系數。equation=(0,-1,0,0),前三個參數(0,-1,0)可以理解為法線向下,只有向下的,即Y<0的才能顯示,最后一 個參數0表示從z=0平面開始。這樣就是裁剪掉上半平面。相應的equation=(0,1,0,0)表示裁剪掉下半平面,equation= (1,0,0,0)表示裁剪掉左半平面,equation=(-1,0,0,0)表示裁剪掉右半平面,equation=(0,0,-1,0)表示裁剪掉 前半平面,equation=(0,0,1,0)表示裁剪掉后半平面

 

 

 

裁剪平面的代碼例子

示例3-5是經過兩個裁剪平面裁剪的線框球體,裁去了3/4體積,如圖3-23所示。


 
圖3-23 裁剪后的線框球體

示例程序3-5 經過兩個裁剪平面裁剪的線框球體:clip.c

void init(void)  
{  
glClearColor(0.0,0.0,0.0,0.0);  
glShadeModel(GL_FLAT);  
}  
void display(void)  
{  
GLdouble eqn [4]={0.0,1.0,0.0,0.0};  
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);  
 
glClipPlane(GL_CLIP_PLANE0,eqn);  
glEnable(GL_CLIP_PLANE0);  
 
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);  
}  
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);  
glutMainLoop();  
return 0;  
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM