Click here to Skip to main content
15,892,927 members
Home / Discussions / Graphics
   

Graphics

 
Question3D Model seems to be all... 2Dish [Solved] Pin
Anthony Mushrow24-May-09 16:24
professionalAnthony Mushrow24-May-09 16:24 
AnswerRe: 3D Model seems to be all... 2Dish Pin
Tim Craig24-May-09 17:50
Tim Craig24-May-09 17:50 
QuestionDrawing a Sphere in 3D Pin
Avion8520-May-09 9:36
Avion8520-May-09 9:36 
AnswerRe: Drawing a Sphere in 3D Pin
Baltoro20-May-09 15:09
Baltoro20-May-09 15:09 
GeneralRe: Drawing a Sphere in 3D Pin
Avion8521-May-09 2:42
Avion8521-May-09 2:42 
GeneralRe: Drawing a Sphere in 3D Pin
Baltoro23-May-09 9:15
Baltoro23-May-09 9:15 
GeneralRe: Drawing a Sphere in 3D Pin
Avion8523-May-09 10:15
Avion8523-May-09 10:15 
GeneralRe: Drawing a Sphere in 3D Pin
Avion8524-May-09 13:14
Avion8524-May-09 13:14 
its finally done, if anyone needs it, here we go:

<pre>

class Sphere : public Entity
{
public:
     IDirect3DVertexBuffer9* SphereVertexBuffer;
     IDirect3DIndexBuffer9*   SphereIndexBuffer;

     int parallels;
     int meridians;
     float theta;     // od 0 do pi
     float phi;          //od 0 to 2pi
     int num_vertices;
     int num_triangles;

     void get_ime(){OutputDebugString("banana");};

     Sphere(int *idd, std::string iime, int pparallels, int mmeridians, std::list<Entity*> *EEntity_list) : Entity(iime, *idd), parallels(pparallels), meridians(mmeridians){
         
          float x,y,z;
          theta=0;     // od 0 do pi
          phi=0;
                   
          int index=0;
          num_vertices=2*(parallels-1)*(meridians)+2;

          HR(gd3dDevice->CreateVertexBuffer(num_vertices* sizeof(VertexPos), D3DUSAGE_WRITEONLY,
          0, D3DPOOL_MANAGED, &SphereVertexBuffer, 0));

          VertexPos *v;
          HR(SphereVertexBuffer->Lock( 0, 0, (void**)&v, 0 ))

          for(int i=0;i<meridians;i++){     //     iliti theta,manji kut
               for(int j=0;j<2*parallels+1;j++){     //     ili phi, veći kut od 0-2pi
                    if(j==0 || j == parallels ){                   
                         phi=phi+(D3DX_PI*2 / parallels)/2;               //uvjeti za kapice
                         j++;
                    }
                    if(j==(parallels*2)) break;
         
                         x=cosf(theta)*sinf(phi);
                         if(fabs(x)<0.000001) x=0;
                        
                         y=sinf(theta)*sinf(phi);
                         if(fabs(y)<0.000001) y=0;
                        
                         z=cos(phi);
                         if(fabs(z)<0.000001) z=0;

                         v[index] = VertexPos(x,y,z);
                         index++;
                         phi=phi+(D3DX_PI*2 / parallels)/2;
                        

               }
               phi=0;
               theta=theta+(D3DX_PI/ meridians);    
          }
         
          v[index]=VertexPos(0,0,1);     //126 ako je 9, 9, a je//kapice iliti
          index++;
          v[index]=VertexPos(0,0,-1);     //127
    
          SphereVertexBuffer->Unlock();
          //OutputDebugString(index);

          HR(gd3dDevice->CreateIndexBuffer(12*meridians*(parallels-1) * sizeof(WORD), D3DUSAGE_WRITEONLY,
          D3DFMT_INDEX16, D3DPOOL_MANAGED, &SphereIndexBuffer, 0));

          WORD* k = 0;
          int brojac=-1;
          HR(SphereIndexBuffer->Lock(0, 0, (void**)&k, 0));

          for(int i=1;i<meridians+1;i++){
         
               k[++brojac]=num_vertices-2;
               (i==meridians) ? (k[++brojac]=2*(parallels-1)-1):(k[++brojac]=i*2*(parallels-1));                    //kapica gore, prednja
               k[++brojac]=i*2*(parallels-1)-2*(parallels-1);              
         

               k[++brojac]=num_vertices-2;
               (i==meridians) ? (k[++brojac]=0):(k[++brojac]=i*2*(parallels-1)+2*(parallels-1)-1);               //kapica gore, preko puta
               k[++brojac]=i*2*(parallels-1)-1;
              
              
    
               for(int j=0;j<parallels-2;j++){
                   
                    k[++brojac]=i*2*(parallels-1)-2*(parallels-1)+j;
                    (i==meridians) ? (k[++brojac]=2*(parallels-1)-j-1):(k[++brojac]=i*2*(parallels-1)+j);          //prednji, lijevo gore trokut
                    k[++brojac]=i*2*(parallels-1)-2*(parallels-1)+j+1;
    
                    (i==meridians)?(k[++brojac]=2*(parallels-1)-j-1):(k[++brojac]=i*2*(parallels-1)+j);     //prednji, suprotni
                    (i==meridians)?(k[++brojac]=2*(parallels-1)-j-2):(k[++brojac]=i*2*(parallels-1)+j+1);
                    k[++brojac]=i*2*(parallels-1)-2*(parallels-1)+j+1;
              
                    k[++brojac]=i*2*(parallels-1)-1-j;
                    (i==meridians)?(k[++brojac]=j):(k[++brojac]=i*2*(parallels-1)+2*(parallels-1)-1-j);               //stražnji, lijevo gore trokut
                    k[++brojac]=i*2*(parallels-1)-2-j;
                   
                    (i==meridians)?(k[++brojac]=j):(k[++brojac]=i*2*(parallels-1)+2*(parallels-1)-1-j);         
                    (i==meridians)?(k[++brojac]=j+1):(k[++brojac]=i*2*(parallels-1)+2*(parallels-1)-2-j);               //stražnji, suprotni
                    k[++brojac]=i*2*(parallels-1)-2-j;
               }
              
               k[++brojac]=num_vertices-1;
               k[++brojac]=i*2*(parallels-1)-(parallels-1)-1;                                                                 //kapica dolje, prednja
               (i==meridians) ? (k[++brojac]=(parallels-1)):(k[++brojac]=i*2*(parallels-1)+(parallels-1)-1);
              
               k[++brojac]=num_vertices-1;
               k[++brojac]=i*2*(parallels-1)-(parallels-1);                                                                 //kapica dolje, preko puta
               (i==meridians) ? (k[++brojac]=(parallels-1)-1):(k[++brojac]=i*2*(parallels-1)+(parallels-1));
          }

          HR(SphereIndexBuffer->Unlock());
    
          EEntity_list->push_back(this);
          ++(*idd); //*idd=*idd+1 <-isto kao i navedeno
     }
         
     void Render(){
          HR(gd3dDevice->SetStreamSource(0, SphereVertexBuffer, 0, sizeof(VertexPos)));
          HR(gd3dDevice->SetIndices(SphereIndexBuffer));
          HR(gd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST,0,0,num_vertices,0,4*meridians*(parallels-1)));
          //HR(gd3dDevice->DrawPrimitive(D3DPT_POINTLIST,0,144));
          //HR(gd3dDevice->DrawIndexedPrimitive( D3DPT_POINTLIST,0,0,200,0,288));    
     }
         

};


</pre>
GeneralRe: Drawing a Sphere in 3D Pin
weightloss3-Jun-09 6:00
weightloss3-Jun-09 6:00 
GeneralRe: Drawing a Sphere in 3D Pin
Avion854-Jun-09 10:04
Avion854-Jun-09 10:04 
GeneralRe: Drawing a Sphere in 3D Pin
yoghurt14-Jun-09 22:27
yoghurt14-Jun-09 22:27 
GeneralRe: Drawing a Sphere in 3D Pin
Avion855-Jun-09 2:52
Avion855-Jun-09 2:52 
Questionhelp in building a color lookup table Pin
mesho17-May-09 23:41
mesho17-May-09 23:41 
AnswerRe: help in building a color lookup table Pin
Tim Craig18-May-09 18:27
Tim Craig18-May-09 18:27 
GeneralRe: help in building a color lookup table Pin
mesho19-May-09 12:23
mesho19-May-09 12:23 
GeneralRe: help in building a color lookup table Pin
Tim Craig19-May-09 12:51
Tim Craig19-May-09 12:51 
GeneralRe: help in building a color lookup table Pin
mesho20-May-09 14:00
mesho20-May-09 14:00 
GeneralRe: help in building a color lookup table Pin
Tim Craig20-May-09 14:44
Tim Craig20-May-09 14:44 
GeneralRe: help in building a color lookup table Pin
mesho21-May-09 2:12
mesho21-May-09 2:12 
GeneralRe: help in building a color lookup table Pin
Tim Craig21-May-09 7:45
Tim Craig21-May-09 7:45 
GeneralRe: help in building a color lookup table Pin
mesho21-May-09 22:48
mesho21-May-09 22:48 
GeneralRe: help in building a color lookup table Pin
Tim Craig22-May-09 13:31
Tim Craig22-May-09 13:31 
GeneralRe: help in building a color lookup table Pin
mesho28-May-09 2:51
mesho28-May-09 2:51 
GeneralRe: help in building a color lookup table Pin
Tim Craig29-May-09 9:00
Tim Craig29-May-09 9:00 
GeneralRe: help in building a color lookup table Pin
Luc Pattyn29-May-09 9:21
sitebuilderLuc Pattyn29-May-09 9:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.