Gol*_*aji 3 c++ opengl visual-studio-2010
使用openGL,我可以在屏幕中心绘制轴(x,y和z),但我无法在每行的末尾绘制箭头.在2d我看到一个使用GL_LINE_STRIP的示例代码,但在3D中,我用googled很多,我没有找到任何例子; 现在我只是在每一行的末尾添加一个点; 但实际上它非常难看.
我怎么画它?这段代码只是将z轴的圆柱体画到适当的位置; 我怎样才能设定其他人?
void Axis_3D (void)
{
GLUquadric* cyl = gluNewQuadric();
GLUquadric* cy2 = gluNewQuadric();
GLUquadric* cy3 = gluNewQuadric();
// gluCylinder (cyl, 0.02, 0.02, 4, 16, 1); // Body of axis.
glColor3f (1,1,1); // Make arrow head white.
glPushMatrix ();
glTranslatef (0.0,0.0,4);
gluCylinder(cyl, 0.04, 0.000, 0.1, 12,1); // Cone at end of axis.
glTranslatef (0.0,4,0.0);
gluCylinder (cy2, 0.04, 0.001, 0.1, 12,1);
glTranslatef (4,0.0,0.0);
gluCylinder (cy3, 0.04, 0.001, 0.1, 12,1);
glPopMatrix ();
}
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我使用这些函数在一个可爱的小模拟程序中绘制箭头.玩得开心:)
#define RADPERDEG 0.0174533
void Arrow(GLdouble x1,GLdouble y1,GLdouble z1,GLdouble x2,GLdouble y2,GLdouble z2,GLdouble D)
{
double x=x2-x1;
double y=y2-y1;
double z=z2-z1;
double L=sqrt(x*x+y*y+z*z);
GLUquadricObj *quadObj;
glPushMatrix ();
glTranslated(x1,y1,z1);
if((x!=0.)||(y!=0.)) {
glRotated(atan2(y,x)/RADPERDEG,0.,0.,1.);
glRotated(atan2(sqrt(x*x+y*y),z)/RADPERDEG,0.,1.,0.);
} else if (z<0){
glRotated(180,1.,0.,0.);
}
glTranslatef(0,0,L-4*D);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluCylinder(quadObj, 2*D, 0.0, 4*D, 32, 1);
gluDeleteQuadric(quadObj);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluDisk(quadObj, 0.0, 2*D, 32, 1);
gluDeleteQuadric(quadObj);
glTranslatef(0,0,-L+4*D);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluCylinder(quadObj, D, D, L-4*D, 32, 1);
gluDeleteQuadric(quadObj);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluDisk(quadObj, 0.0, D, 32, 1);
gluDeleteQuadric(quadObj);
glPopMatrix ();
}
void drawAxes(GLdouble length)
{
glPushMatrix();
glTranslatef(-length,0,0);
Arrow(0,0,0, 2*length,0,0, 0.2);
glPopMatrix();
glPushMatrix();
glTranslatef(0,-length,0);
Arrow(0,0,0, 0,2*length,0, 0.2);
glPopMatrix();
glPushMatrix();
glTranslatef(0,0,-length);
Arrow(0,0,0, 0,0,2*length, 0.2);
glPopMatrix();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11890 次 |
| 最近记录: |