我有一个非常普遍的问题.我希望确定多个物体的边界点(包括30-50个闭合多边形(z),每个具有大约300个点(x,y,z)).我正在使用固定视口,该视口围绕x,y和z轴旋转(alpha,beta,gamma),这是多边形坐标系的原点.
我认为它有两种可能性:透视投影或光线追踪.透视投影似乎需要对每个点进行大量矩阵运算,以确定其位置是否在视口内.或者给定大量的点我最好将视口像素光线追踪到对象?即确定是否存在交叉点,然后确定是否在对象内或外交叉处发生交叉.在任何一种情况下,我都会将此结果写为0(外部)或1(内部)到200x200,表示视口的整数矩阵
谢谢你的期待
我刚开始玩OpenGl来渲染一些结构,每个结构都包含多个多边形.基本上我想执行相当于在世界(结构)坐标中设置(0,0,z)的摄像机并围绕世界轴的x,y和z轴(按此顺序!)旋转它来渲染每个结构的视图(据我所知,通常的做法是使用逆相机矩阵).因此据我所知,我需要翻译(到世界原点即(0,0,-z))*rotateZ rotateY rotateX*translate(重新定义世界原点见下文)
所以我想我需要这样的东西:
//Called when the window is resized
void handleResize(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(9.148, (double)w / (double)h, 800.0, 1500.0);
}
float _Zangle = 10.0f;
float _cameraAngle = 90.0f;
//Draws the 3D scene
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
glLoadIdentity(); //Reset the drawing perspective
glTranslatef(0.0f, 0.0f, -z); //Move forward Z (mm) units
glRotatef(-_Zangle, 0.0f, 0.0f, 1.0f); //Rotate "camera" about the z-axis
glRotatef(-_cameraAngle, 0.0f, 1.0f, 0.0f); …Run Code Online (Sandbox Code Playgroud)