如何在一个三维空间中画多条垂直于底面的线段....若表达不清楚请回帖提出.在线等待指导...
望各位大虾 不要因为问题简单就...,望不吝赐教...感谢!

解决方案 »

  1.   

    每条线断的上下端点的X,Y坐标是一样的,而Z坐标不同而已。
      

  2.   

    在详细点吧,,比如如何创建一个三维的环境同时在这个环境里做出一个x,y,z的坐标系,给出一些作图的核心代码给我看一下最好```
      

  3.   

    那使用D3D或OpenGL建立三维环境吧。
      

  4.   

    初始化环境我知道一些``可是我对画图形那部分,就是确定原点位置在在原点向三个方向画出三个坐标轴的 绘画代码不知道怎么弄,,请教..
    用OpenGL吧
      

  5.   

    RECT rect;
    int sw=640;
    int sh=480;
    bool fullscreen =1;
    GLfloat aspect;
    GLfloat rtri=0.0f;
    GLfloat rquad;
    GLfloat xrot, yrot, zrot;
    GLuint texture[1];#pragma comment(lib,"opengl32.lib")
    #pragma comment(lib,"glu32.lib")
    #pragma comment(lib,"glaux.lib")AUX_RGBImageRec *LoadBMP(char *filename)
    {
    FILE *File=NULL;
    if (!filename==NULL)
    {
    return NULL;
    }
    File=fopen(filename,"r");
    if (File)
    {
    fclose(File);
    return  auxDIBImageLoad(filename);
    }
    return NULL;
    }
    int LoadGLTextures()
    {
    int Status=FALSE;
    AUX_RGBImageRec *TextureImages[1];
    memset(TextureImages,0,sizeof(void*)*1);
    if (TextureImages[0]=LoadBMP("c:\\tx.bmp"))
    {
    Status=TRUE;
    glGenTextures(1,&texture[0]);
    glBindTexture(GL_TEXTURE_2D,texture[0]);
    glTexImage2D(GL_TEXTURE_2D,0,3,TextureImages[0]->sizeX,TextureImages[0]->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImages[0]->data);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
    }
    if (TextureImages[0])
    {
    if (TextureImages[0]->data)free(TextureImages[0]->data);
    free(TextureImages[0]);
    }
       return Status;
    }
    void SceneResizeViewPort(GLsizei w,GLsizei h)
    {
    if(h==0){h=1;}
    aspect=(GLfloat)w/(GLfloat)h;
    glViewport(0,0,w,h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f,aspect,1.0f,100.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    }
    int SceneInit(GLvoid)
    {
    LoadGLTextures();
    glEnable(GL_TEXTURE_2D);
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0,0.0,0.0,0.0);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
    return TRUE;
    }
    int SceneShow(GLvoid)
    {
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    // add your own graph action here.
    glTranslatef(-1.5f,1.0f,-9.0f);
    glRotatef(xrot,1.0f,0.0f,0.0f);
    glRotatef(yrot,0.0f,1.0f,0.0f);
    glRotatef(zrot,0.0f,0.0f,1.0f);
    glBindTexture(GL_TEXTURE_2D,texture[0]); //glRotatef(rtri,3.0f,2.0f,1.5f); glBegin(GL_QUADS);
    glTexCoord2f(0.0f,0.0f);
    glVertex3f(-1.0f,-1.0f,1.0f);
    glTexCoord2f(1.0f,0.0f);
    glVertex3f(1.0f,-1.0f,1.0f);
    glTexCoord2f(1.0f,1.0f);
    glVertex3f(1.0f,1.0f,1.0f);
    glTexCoord2f(1.0f,0.0f);
    glVertex3f(-1.0f,1.0f,1.0f);


    glEnd();
    //
    // To draw a cube, we draw six squares as the planes and color them differently. 
    // 
    glLoadIdentity();
    glTranslatef(1.5f,0.0f,-9.0f);
    glRotatef(rquad,1.0f,1.0f,2.0f);
    glBegin(GL_QUADS);
    glColor3f(0.0f,1.0f,0.0f);       // The top plane
    glVertex3f(1.0f,1.0f,-1.0f);
    glVertex3f(-1.0f,1.0f,-1.0f);
    glVertex3f(-1.0f,1.0f,1.0f);
    glVertex3f(1.0f,1.0f,1.0f); glColor3f(1.0f,0.5f,0.0f);       // The bottom plane
    glVertex3f(1.0f,-1.0f,1.0f);
    glVertex3f(-1.0f,-1.0f,1.0f);
    glVertex3f(-1.0f,-1.0f,-1.0f);
    glVertex3f(1.0f,-1.0f,-1.0f); glColor3f(1.0f,0.0f,0.0f);  // The front plane
    glVertex3f(1.0f,1.0f,1.0f);
    glVertex3f(-1.0f,1.0f,1.0f);
    glVertex3f(-1.0f,-1.0f,1.0f);
    glVertex3f(1.0f,-1.0f,1.0f); glColor3f(1.0f,1.0f,0.0f);  // The back plane
    glVertex3f(1.0f,-1.0f,-1.0f);
    glVertex3f(-1.0f,-1.0f,-1.0f);
    glVertex3f(-1.0f,1.0f,-1.0f);
    glVertex3f(1.0f,1.0f,-1.0f); glColor3f(0.0f,0.0f,1.0f);      // The left plane
    glVertex3f(-1.0f,1.0f,-1.0f);
    glVertex3f(-1.0f,1.0f,1.0f);
    glVertex3f(-1.0f,-1.0f,1.0f);
    glVertex3f(-1.0f,-1.0f,-1.0f); glColor3f(1.0f,0.0f,1.0f);      // The left plane
    glVertex3f(1.0f,1.0f,1.0f);
    glVertex3f(1.0f,-1.0f,1.0f);
    glVertex3f(1.0f,-1.0f,-1.0f);
    glVertex3f(1.0f,1.0f,-1.0f); glEnd();
    //
    // To draw a pyramid,we draw three triangles as four planes and a square as the bottom. 
    //  glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f);  glVertex3f(0.0f,1.0f,0.0f);     //  front plane
    glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);
    glColor3f(0.0f,0.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); // The right plane
    glColor3f(0.0f,0.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f);
    glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); // The back plane
    glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f);
    glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);

    glColor3f(1.0f,0.0f,0.0f);  glVertex3f(0.0f,1.0f,0.0f); // The left plane
    glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
    glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);
    glEnd();
    glBegin(GL_QUADS);
    glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f);  // The bottom plane
    glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f);
    glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f);
      glColor3f(0.0f,0.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f);  
    glEnd(); glLoadIdentity();
    glTranslatef(-1.5f,-2.0f,-8.0f);
    glRotatef(rquad,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLES);
    glColor3f(0.5f,1.0f,1.0f);
    glVertex3f(1.0f,1.0f,-2.0f);
    glVertex3f(-0.3f,-0.3f,-1.7f);
    glVertex3f(0.3f,-0.3f,-2.0f); glColor3f(0.0f,1.0f,1.0f);
    glVertex3f(1.0f,1.0f,-2.0f);
    glVertex3f(0.3f,-0.3f,-2.0f);
    glVertex3f(-0.3f,-0.3f,-2.3f); glColor3f(1.0f,1.0f,1.0f);
    glVertex3f(1.0f,1.0f,-2.0f);
    glVertex3f(-0.3f,-0.3f,-2.3f);
    glVertex3f(-0.3f,-0.3f,-1.7f);
    glEnd();
    xrot+=0.3f;
    yrot+=0.2f;
    zrot+=0.4f; return TRUE;
    }
    void DisableOpenGL()
    {
    wglMakeCurrent(NULL,NULL);
    wglDeleteContext(hRC);
    ReleaseDC(hWnd,hDC);
    }
    void EnableOpenGL()
    {
    PIXELFORMATDESCRIPTOR pfd;
    int iFormat;
    hDC=GetDC(hWnd);
    ZeroMemory(&pfd,sizeof(pfd));
    pfd.nSize=sizeof(pfd);
    pfd.nVersion=1;
    pfd.dwFlags=PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
    pfd.iPixelType=PFD_TYPE_RGBA;
    pfd.cColorBits=16;
    pfd.cDepthBits=16;
    pfd.iLayerType=PFD_MAIN_PLANE;
    iFormat=ChoosePixelFormat(hDC,&pfd);
    SetPixelFormat(hDC,iFormat,&pfd);
    hRC=wglCreateContext(hDC);
    wglMakeCurrent(hDC,hRC);
    }
    bool ChangeResolution(int w,int h,int bitdepth)
    {
    DEVMODE devMode;
    int modeSwitch;
    int closeMode=0;
    EnumDisplaySettings(NULL,closeMode,&devMode);
    devMode.dmBitsPerPel=bitdepth;
    devMode.dmPelsWidth=w;
    devMode.dmPelsHeight=h;
    devMode.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
    modeSwitch=ChangeDisplaySettings(&devMode,CDS_FULLSCREEN);
    if (modeSwitch==DISP_CHANGE_SUCCESSFUL){return TRUE;}
    else 
    {
    ChangeDisplaySettings(NULL,0);
    return FALSE;
    }
    }