OPENGL学习项目--立体正方形的实时三维模型

实现一个能够跟随鼠标切换视角,进行动态消隐的正方体,能够帮助更好的实现立体三维几何在二维当中的实现。

系统主要涉及在二维平面中三维图形的绘制、图形的旋转、图形的平移、图形的缩放和图形的消隐算法。

1.正方体的三维呈现

首先将顶点标号,通过设置顶点的xyz坐标数组,将各个顶点的坐标对应起来。

             x[8] = { a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o, 0+o };

             y[8] = { 0+o, a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o };

             z[8] = { a+o, a+o, a+o, a+o, 0+o, 0+o, 0+o, 0+o };

(关于+o的原因在后面会提到)

 通过点面矩阵,将同一个面的所有点聚集起来,放入一个矩阵中,给六个面标上序号。

            f[6] = { 0,1,2,3,4,5 }; //面的号码

    fp[6][5] = { {0,1,2,3,0},{1,0,4,5,1},{4,0,3,7,4},{2,1,5,6,2}, {6,7,3,2,6},{6,5,4,7,6} }; //面的顶点序

2. 图形的旋转

利用 mouseDown 鼠标触发事件触发图形旋转,鼠标启动,摄像机可以进行坐标和角度的转换,利用:

        glRotatef(xrot, 1.0f, 0.0f, 0.0f);

        glRotatef(1.0f, yrot, 0.0f, 0.0f);//设置物体如何旋转的方式参数为旋转角度  

函数获取旋转角度。

3. 图形的平移

        x[8] = { a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o, 0+o };

在最初初始化坐标时,利用‘可修改的变量o’对数组进行赋值,在触发键盘事件时修改o的值,重新画图,即可得到初始坐标变换的图像,即完成了图像的平移。

4. 图形的缩放

        x[8] = { a+o, a+o, 0+o, 0+o, a+o, a+o, 0+o, 0+o };

在最初初始化坐标时,利用可修改的变量a对数组进行赋值,在触发键盘事件时修改a的值,重新画图,即可得到放大/缩小的图像,即完成了图像的缩放。

5. 图形的实时动态消隐

根据课上所学的知识:

(1)后向面总是看不见的;

(2)不会仅由于后向面的遮挡,而使别的棱成为不可见;

(3)可以把这些后向面全部去掉,并不影响消隐结果。

计算正方在当前视角下的视点向量S和正方体各个面的法向量(V)

①若V·S<0,称该多边形为前向面。② 若V·S>0,称该多边形为后向面。

猜你喜欢

转载自blog.csdn.net/qq_52913088/article/details/122569923