制Bezier曲线:
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 30; i++)
glEvalCoord1f((GLfloat) i/30.0);
glEnd();
该Bezier曲线是由30段line构成,我需要在场景中设置一个物体沿该曲线路径移动, 我怎么获得各个顶点的坐标值呢?反馈信息好象只包含窗口可见的顶点信息,有更好的办法吗?请赐教。
答:最直接的办法是你自己来计算(只是简单的Matrix变换)当然也是比较麻烦的;另外可以让OpenGL帮你算,方法是定出物体的坐标系沿着Bezier曲线移动后的新位置,这种移动可能不唯一(比如简单的平移或利用曲线的切平面和法平面来定义),所以你必须定出移动的规则,有了新的坐标系数据,可以gl相应的Matrix,就可以直接显示了,如果要求出实际的坐标(如果只是想显示是没有必要计算的),用Matrix去乘吧。
问:我现在遇到一个问题,就是用OpenGL来画出一个动态的海洋,波浪涌动。因为还要有船贴图似乎不行,而计算海平面的三维坐标值简直太麻烦了,巨量的点,复杂的法线...。最后一招,用3DS MAX画出来在加载进去,但格式转换也不容易。我该怎么做呢?
答:这个问题其实可以用很简单的方法解决。可用一个简单的四边形或格网构成海面框架,然后进行海面纹理贴图,让纹理动起来,不就有动态波浪海洋的场景了吗。在海面上的船可以继续加,各种变换照常进行。
问:在用C++Builder编写OpenGL程序时,在Scene窗口中,用鼠标移动物体,能否有办法知道移动后物体所在的坐标位置?用鼠标任意旋转物体,怎样知道该物体的旋转角度和方向等数值。即:物体初始位于原点,怎样把鼠标移动物体的视觉效应转化为精确的坐标变换?
答:需要建立一个新的三维坐标系,将视点、图像投影面(Scene窗口)以及物体等,一起定位与这个坐标系里。当鼠标移动时,延长视点与鼠标屏幕点的连线,使其相交与物体移动的面(假定使用二维鼠标,物体在XY或YZ或ZX或球面上移动),其交点就是物体移动后的坐标点。旋转角度
则根据前后两次位置不同,计算出相对于某个旋转中心(如视点、物体中心点或坐标原点等)的旋转角度。
问:MiniGL与OpenGL的内容有什么