之前了解到,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 返回的...