Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Đồ họa C++ | Vẽ ngôi nhà trên C++?

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    2

    Question Đồ họa C++ | Vẽ ngôi nhà trên C++?

    Bọn em có đang làm Môn đồ họa máy tính làm bằng C++ :
    vẽ ngôi nhà
    1/ phối chiếu ngôi nhà.
    2/ làm mặt che khuất() "mặt bị che khuất thì không thấy tức là bi che đi hay là không hiển thị lên mành hình"
    3/ tô màu , làm bóng cho ngôi nhà.

    BỌn em mới làm đc code vẽ ngôi nhà + phối chiếu.... nhưng Bọn em không biết làm phần che khuất... có ai biết không chỉ em với

    code cảu bọn em này(chạy trên BC31 -- borland C)
    Mã:

    Code:
    #include <graphics.h>
    #include <conio.h>
    #include <stdio.h>
    #include <iostream.h>
    #include <math.h>
    #include <stdlib.h>
    
    #define UP    72
    #define DOWN    80
    #define LEFT    75
    #define RIGHT    77
    
    const int inc_ang = 5;
    const float PI = atan(1)*4;
    struct ToaDo3D
    {
        float x, y, z;
    };
    struct ToaDo2D
    {
        float x, y;
    };
    
    struct DaGiac
    {
        ToaDo3D n;
        int DSCanh[10];
    };
    DaGiac DSdg[10];
    ToaDo3D p[20];
    int canh[20][2];
    ToaDo3D mat;
    enum PhepChieu {PhoiCanh, SongSong};
    
    float r, d, theta, phi;
    float aux1, aux2, aux3, aux4;
    float aux5, aux6, aux7, aux8;
    PhepChieu projection;
    //float xp, yp;
    ToaDo3D obs ;
    ToaDo2D pe, pc;
    char ch;
    
    void ThietLapDoHoa(char *duongdan);
    void KhoiTaoPhepChieu();
    float Tinhvohuong(ToaDo3D v,ToaDo3D n);
    void Chieu(ToaDo3D p);
    //void VeDen(ToaDo3D p);
    //void DiDen(ToaDo3D p);
    void line1(ToaDo3D p1,ToaDo3D p2);
    void TrucToaDo();
    void DieuKhienQuay();
    
    void ThietLapDoHoa(char *duongdan)
    {
        int gdriver = DETECT, gmode, errorcode;
        initgraph(&gdriver, &gmode, duongdan);
        errorcode = graphresult();
    
        if (errorcode != grOk)
        {
           printf("Graphics error: %s\n", grapherrormsg(errorcode));
           printf("Press any key to halt:");
           getch();
           exit(1);
        }
    }
    void KhoiTaoPhepChieu()
    {
        float th, ph;
        th = PI*theta/180;
        ph = PI*phi/180;
        aux1 = sin(th);
        aux2 = sin(ph);
        aux3 = cos(th);
        aux4 = cos(ph);
        aux5 = aux3*aux2;
        aux6 = aux1*aux2;
        aux7 = aux3*aux4;
        aux8 = aux1*aux4;
        pc.x = getmaxx()/2;
        pc.y = getmaxy()/2;
    }
    void Chieu(ToaDo3D p,float &xp,float &yp)
    {
        obs.x = -p.x*aux1 + p.y*aux3;
        obs.y = -p.x*aux5 - p.y*aux6 + p.z*aux4;
        if (projection == PhoiCanh)
        {
            obs.z = -p.x*aux7 - p.y*aux6 - p.z*aux2 + r;
            xp = d*obs.x/obs.z;
            yp = d*obs.y/obs.z;
        }
        else
        {
            xp = d*obs.x;
            yp = d*obs.y;
        }
    }
    /*void VeDen(ToaDo3D p)
    {
        Chieu(p);
        pe.x = pc.x + xp;
        pe.y = pc.y - yp;
        lineto(pe.x, pe.y);
    }
    void DiDen(ToaDo3D p)
    {
        Chieu(p);
        pe.x = pc.x + xp;
        pe.y = pc.y - yp;
        moveto(pe.x, pe.y);
    } */
    /*void line1(ToaDo3D p1,ToaDo3D p2)
    {
        float p1x,p1y,p2x,p2y;
        Chieu(p1,p1x,p1y);
        Chieu(p2,p2x,p2y);
        line(pc.x+p1x,pc.y-p1y,pc.x+p2x,pc.y-p2y);
    } */
    void line1(ToaDo3D p1, ToaDo3D p2)
    {
        float p1x,p1y,p2x,p2y;
        Chieu(p1,p1x,p1y);
        Chieu(p2,p2x,p2y);
        line(pc.x+p1x,pc.y-p1y,pc.x+p2x,pc.y-p2y);
    }
    
    void TrucToaDo()
    {
        ToaDo3D oo,xx,yy,zz;
        oo.x = 0;    oo.y = 0;    oo.z = 0;
        xx.x = 3;    xx.y = 0; xx.z = 0;
        yy.x = 0;    yy.y = 3;    yy.z = 0;
        zz.x = 0; zz.y = 0; zz.z = 3;
        /*DiDen(oo);    VeDen(xx);
        DiDen(oo);    VeDen(yy);
        DiDen(oo);    VeDen(zz);  */
        line1(oo,yy);
        line1(oo,zz);
        line1(oo,xx);
    }
    void DieuKhienQuay()
    {
        ch = getch();
        if (ch==0)
            ch = getch();
        cleardevice();
        switch(ch)
        {
            case UP:
                phi = phi + inc_ang;
                break;
            case DOWN:
                phi = phi - inc_ang;
                break;
            case LEFT:
                theta = theta + inc_ang;
                break;
            case RIGHT:
                theta = theta - inc_ang;
                break;
        }
    }
    
    
    //ToaDo3D p1,p2,p3,p4,p5,p6,p7,p8;
    /*void VeLapPhuong()
    {
        /*DiDen(p1);    VeDen(p2);
        DiDen(p3);    VeDen(p4);
        DiDen(p1);    VeDen(p6);
        DiDen(p7);    VeDen(p8);
        DiDen(p5);    VeDen(p6);
        DiDen(p3);    VeDen(p8);
        DiDen(p2);    VeDen(p7);
        DiDen(p4);    VeDen(p5);
        DiDen(p5);    VeDen(p8);
        DiDen(p1);    VeDen(p4);
        DiDen(p3);    VeDen(p2);
        DiDen(p6);    VeDen(p7);
        for(int i=1;i<=20;i++)
        {
            line1(p[canh[i][0]],p[canh[i][1]]);
        }
    }
      */
    void VeLapPhuong()
    {
    
        for(int j=1;j<=7;j++)
        {
           //if(Tinhvohuong(mat,DSdg[j].n)>=0)
            for(int i=1;i<2;i++)
            {
                line1(p[canh[DSdg[j].DSCanh[i]][0]],p[canh[DSdg[j].DSCanh[i]][1]]);
            }
        }
    }
    float Tinhvohuong(ToaDo3D v,ToaDo3D n)
    {
        return (v.x*n.x+v.y*n.y+v.z*n.z);
    }
    
    void main()
    {
        d = 100;
        r = 1;
        theta = 0;
        phi = 0;
        mat.x=1;
        mat.y=0;
        mat.z=0;
        projection = SongSong;
    
        /*p1.x = 0;    p1.y = 0;    p1.z = 0;
        p2.x = 0;    p2.y = 1;    p2.z = 0;
        p3.x = 1;    p3.y = 1;    p3.z = 0;
        p4.x = 1;    p4.y = 0;    p4.z = 0;
        p5.x = 1;    p5.y = 0;    p5.z = 1;
        p6.x = 0;    p6.y = 0;    p6.z = 1;
        p7.x = 0;    p7.y = 1;    p7.z = 1;
        p8.x = 1;    p8.y = 1;    p8.z = 1;*/
        float a=1.5;
        p[1].x = 0;    p[1].y = 0;    p[1].z = 0;
        p[2].x = 0;    p[2].y = 1;    p[2].z = 0;
        p[3].x = 1*a;    p[3].y = 1;    p[3].z = 0;
        p[4].x = 1*a;    p[4].y = 0;    p[4].z = 0;
        p[5].x = 1*a;    p[5].y = 0;    p[5].z = 1;
        p[6].x = 0;    p[6].y = 0;    p[6].z = 1;
        p[7].x = 0;    p[7].y = 1;    p[7].z = 1;
        p[8].x = 1*a;    p[8].y = 1;    p[8].z = 1;
        p[9].x = 0.5*a;    p[9].y = 0;    p[9].z = 1.2;
        p[10].x = 0.5*a;    p[10].y = 1;    p[10].z = 1.2;
            p[11].x = 1*a;    p[11].y = 0.7;    p[11].z = 0;
            p[12].x = 1*a;    p[12].y = 0.7;    p[12].z = 0.5;
            p[13].x = 1*a;    p[13].y = 0.3;    p[13].z = 0.5;
            p[14].x =1*a;    p[14].y = 0.3;    p[14].z = 0;
        /*DiDen(p1);    VeDen(p2);
        DiDen(p3);    VeDen(p4);
        DiDen(p1);    VeDen(p6);
        DiDen(p7);    VeDen(p8);
        DiDen(p5);    VeDen(p6);
        DiDen(p3);    VeDen(p8);
        DiDen(p2);    VeDen(p7);
        DiDen(p4);    VeDen(p5);
        DiDen(p5);    VeDen(p8);
        DiDen(p1);    VeDen(p4);
        DiDen(p3);    VeDen(p2);
        DiDen(p6);    VeDen(p7); */
    
        canh[1][0]=1;canh[1][1]=2;
        canh[2][0]=3;canh[2][1]=4;
        canh[3][0]=1;canh[3][1]=6;
        canh[4][0]=7;canh[4][1]=8;
        canh[5][0]=5;canh[5][1]=6;
        canh[6][0]=3;canh[6][1]=8;
        canh[7][0]=2;canh[7][1]=7;
        canh[8][0]=4;canh[8][1]=5;
        canh[9][0]=5;canh[9][1]=8;
        canh[10][0]=1;canh[10][1]=4;
        canh[11][0]=3;canh[11][1]=2;
        canh[12][0]=6;canh[12][1]=7;
    
        canh[13][0]=5;canh[13][1]=9;
        canh[14][0]=6;canh[14][1]=9;
        canh[15][0]=7;canh[15][1]=10;
        canh[16][0]=8;canh[16][1]=10;
        canh[17][0]=9;canh[17][1]=10;
    
        canh[18][0]=11;canh[18][1]=12;
        canh[19][0]=12;canh[19][1]=13;
        canh[20][0]=13;canh[20][1]=14;
    
    
    
    
    
        //DSdg[1].DSCanh[7]=(2,6,8,9,18,19,20);
    
        DSdg[1].DSCanh[1]=2;
        DSdg[1].DSCanh[2]=6;
        DSdg[1].DSCanh[3]=8;
        DSdg[1].DSCanh[4]=9;
        DSdg[1].DSCanh[5]=18;
        DSdg[1].DSCanh[6]=19;
        DSdg[1].DSCanh[7]=20;
    
        //DSdg[2].DSCanh[4]=(3,4,8,5);
    
    
        DSdg[2].DSCanh[1]=3;
        DSdg[2].DSCanh[2]=4;
        DSdg[2].DSCanh[3]=8;
        DSdg[2].DSCanh[4]=5;
    
        //DSdg[3].DSCanh[4]=(1,3,12,7);
    
    
        DSdg[3].DSCanh[1]=1 ;
        DSdg[3].DSCanh[2]=3 ;
        DSdg[3].DSCanh[3]=12;
        DSdg[3].DSCanh[4]=7;
    
        //DSdg[4].DSCanh[6]=(7,11,6,4,16,15);
    
        DSdg[4].DSCanh[1]=7  ;
        DSdg[4].DSCanh[2]=11 ;
        DSdg[4].DSCanh[3]=6  ;
        DSdg[4].DSCanh[4]=4  ;
        DSdg[4].DSCanh[5]=16 ;
        DSdg[4].DSCanh[6]= 15;
    
        //DSdg[5].DSCanh[4]=(1,11,2,10);
    
        DSdg[5].DSCanh[1]=1    ;
        DSdg[5].DSCanh[2]=11  ;
        DSdg[5].DSCanh[3]=2  ;
        DSdg[5].DSCanh[4]=10;
    
        //DSdg[6].DSCanh[4]=(16,9,13,17);
    
        DSdg[6].DSCanh[1]=16    ;
        DSdg[6].DSCanh[2]=9    ;
        DSdg[6].DSCanh[3]=13  ;
        DSdg[6].DSCanh[4]= 17;
    
        //DSdg[7].DSCanh[4]=(12,15,17,14);
    
        DSdg[7].DSCanh[1]=12   ;
        DSdg[7].DSCanh[2]=15  ;
        DSdg[7].DSCanh[3]=17 ;
        DSdg[7].DSCanh[4]=14;
    
    
        ToaDo3D a1,a2,a3,u,v;
        for (int j=1;j<=7;j++)
        {
            //cout<<DSdg[1].DSCanh[j]<<" ";
               a1=p[canh[DSdg[j].DSCanh[1]][0]];
               a2=p[canh[DSdg[j].DSCanh[1]][1]];
               a3=p[canh[DSdg[j].DSCanh[2]][0]];
               u.x=a1.x-a2.x;
               u.y=a1.y-a2.y;
               u.z=a1.z-a2.z;
               v.x=a1.x-a3.x;
               v.y=a1.y-a3.y;
               v.z=a1.z-a3.z;
    
               DSdg[j].n.x=u.y*v.z-u.z*v.y;
               DSdg[j].n.y=u.z*v.x-u.x*v.z;
               DSdg[j].n.z=u.x*v.y-u.y*v.x;
    
    
        }
    
        ThietLapDoHoa("c:\\BorlandC\\BGI");
    
        do
        {
            KhoiTaoPhepChieu();
            //TrucToaDo();
            VeLapPhuong();
            DieuKhienQuay();
            cleardevice();
        }while (ch!=27);
         closegraph();
    }

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    2

    ui h mà không có ai trả lời... hu hu ! sao mà làm cho nó xoay mà vừa thể hiện đc hình bị che lấp nhỉ? khó quá ai chỉ em với

  3. #3
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Riêng với lập trình thì bạn đừng bao giờ gửi lên một đống mã như vậy người khác không phải viết mã đó ra sẽ không lấy được nhiều thời gian mà đọc cũng như hiểu được mã của bạn, thay vào đó bạn hãy làm 1 trong hai cách sau (cả hai đều đòi hỏi bạn phải biết thu hẹp vùng lỗi):
    - Gửi đoạn mã nhỏ, người khác sẽ đọc mã bạn dễ giúp bạn tìm lỗi hơn
    - Tự tìm cách giải quyết,

    Sở dĩ mình nói vậy là vì khi đã viết được mà dài, đôi khi quay lại nó sau 1 hai ngày bạn sẽ không hiểu làm thế nào mà mình viết mã đó, phải mất một chút thời gian định thần lại. Với người khác,trừ phi có mục định nghiên cứu hay phá hoại, chứ việc đọc mã nguồn sẽ khiến họ tốn rất nhiều thời gian để hiểu được tư tưởng người viết mã

  4. #4
    Ngày gia nhập
    03 2009
    Bài viết
    7

    e hưng . mày có bài về con robot ko vậy . share tao với chứ tao tim hoài mà ko thấy . bài cửa tao cô nói ko làm thủ công được mà làm cách của cô thì tao ko biết làm . mày biết ai có cde hay biết làm thì chỉ với

Các đề tài tương tự

  1. Vẽ tàu vũ trụ bay trên trời đầy sao?
    Gửi bởi mrlamtb trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 10-09-2011, 11:46 AM
  2. Xây dựng ứng dụng vẽ Đa Giác trên C#
    Gửi bởi khangtvust trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 22-08-2011, 05:27 PM
  3. Vẽ đồ thị hàm số từ bậc 1 đến bậc 4 trên C++?
    Gửi bởi royalfamily trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 20-07-2010, 01:31 AM
  4. Bài tập C vẽ đồng hồ trên C
    Gửi bởi chenzy3230 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 02-02-2010, 10:09 PM
  5. interval timer trên C# | Lấy mẫu vẽ đồ thị trên C#. Giúp mình với?
    Gửi bởi mrvui trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 09-05-2009, 10:16 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn