C++ openGL有限三维空间

C++ openGL有限三维空间,c++,opengl,C++,Opengl,我的绘图代码有问题。我必须显示一些箭头,但当它们离轴原点太远时,它们就会消失 我在这里发布了我的相关代码: static void drawArrow( double trans[3][4] , double **d, int num, double *altitude) { int i; double c_min=0.3; double gl_para[16]; GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0}; GLflo

我的绘图代码有问题。我必须显示一些箭头,但当它们离轴原点太远时,它们就会消失

我在这里发布了我的相关代码:

static void drawArrow( double trans[3][4] , double **d, int num, double *altitude)
{

int i;
double c_min=0.3;





double    gl_para[16];
GLfloat   mat_ambient[]     = {0.0, 0.0, 1.0, 1.0};
GLfloat   mat_flash[]       = {0.0, 0.0, 1.0, 1.0};
GLfloat   mat_flash_shiny[] = {50.0};
GLfloat   light_position[]  = {100.0,-200.0,200.0,0.0};
GLfloat   ambi[]            = {0.1, 0.1, 0.1, 0.1};
GLfloat   lightZeroColor[]  = {0.9, 0.9, 0.9, 0.1};

...

argConvGlpara(trans, gl_para);
glMatrixMode(GL_PROJECTION);
glLoadIdentity
glLoadMatrixd( gl_para );

glRotated(180,1,0,0);
glutWireCone(40,40*arrow_factor,10,100);
//arrowfactor can change by keyboard input
...


glDisable( GL_LIGHTING );

glDisable( GL_DEPTH_TEST );

}
我想我必须使用GL_投影矩阵模式,但我相信如果有更好的方法让它工作而不改变它的话


编辑:删除代码中不必要的部分

是否可以减少代码?SSCCE是最好的,但至少要删除任何行为不需要的调用。无论如何,您可能启用了剪辑平面,或者您正在到达深度贴图的远端(由函数的第一个参数控制)。抱歉,我不明白剪辑平面和深度贴图是什么。。PS:我发布了所有的代码,因为每次有人要求我添加代码的另一部分。所以这次我有了阻止的想法。想想你显示器的边缘-有4个剪切边缘。那些边界之外的任何东西都不会显示出来。剪辑平面是三维模拟平面。如果飞机的另一边有东西,就不会显示出来。但谷歌会告诉你这一点,还有更多pI不知道这里如何实现
argConvGlpara(…)
,但通常只有在窗口(将世界投影到的2D对象)更改尺寸时才设置投影矩阵。平移、旋转、缩放等。单个对象通过单独的变换矩阵(modelview)完成。深度范围和剪裁由投影矩阵定义,因此这是您通常不想过多地干扰矩阵的另一个原因。@AndonM.Coleman argConvGlpara(…)是ARToolkit库的一个函数,可将trans_矩阵从3x4更改为1x16。。