3 7 其他裁剪平面

2021-06-29 08:18:04 字數 1431 閱讀 4815

之前了解到,opengl的視景體定義了乙個裁剪區域,只有區域內的物體,才可見。

opengl除了視景體可以裁剪外,還可以自己定義裁剪平面,對物體進行裁剪。

裁剪平面如何表示呢?通過乙個方程:ax + by + cz + d = 0,然後我們只需要指定a,b,c,d的值,就可以表示乙個平面了。

裁剪平面有多少個呢?所有opengl的實現,都必須支援至少6個其他的裁剪平面,有些實現可能允許超過6個的其他裁剪平面。可以用gl_max_clip_planes為引數呼叫glgetintegerv()函式,查詢自己使用的opengl實現所支援的其他裁剪平面的最大數量。

使用裁剪平面很簡單,指定裁剪平面的4個係數,abcd,然後啟用裁剪平面即可,例子如下:

gldouble eqn[4] =;

glclipplane(gl_clip_plane0, eqn);

glenable(gl_clip_plane0);

上述**中, ax + by + cz + d = 0,其中a=0.0, b =1.0, c=0.0, d=0.0,所以表示的方程為 y = 0。上述**,啟用的是裁剪平面0,如果要啟用裁剪平面1,則gl_clip_plane0 需要替換 為 gl_clip_plane1。

#include 

#include

void init(void)

void display(void)

; gldouble eqn2[4] = ;

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 */

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)

/* argsused1 */

void keyboard(unsigned

char key, int x, int y)

}int main(int argc, char** argv)

viewpager聯動實現其他view平滑移動效果

核心 floatview.setx positionoffset floatview.getwidth tablive.getx position tablive.getwidth 達到了viewpager平滑移動,上面浮動線也一起對應移動,就是這麼簡單。詳細說明onpagescrolled 返回的...