Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » Speicherung von Koordinaten....

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.10.2006, 22:53 Uhr
elturco



Ich versuche einen Programm zuschreiben, indem man Polygone zeichnen kann. Ich habe eine ganz dumme frage auf die ich selber nicht komme.

Ich möchte mir den ersten Punkt, den ich mit der rechten Maustaste setzte merken. Damit sich die letze Linie, bei linker Mausklick sich von selbst zeichnet.




C++:
    
    if(button == GLUT_RIGHT_BUTTON && action == GLUT_DOWN)
        {
            endPt1.x = xMouse;
            endPt1.y = winHeight - yMouse;
                  

                       saveArray(endPt1.x, endPt1.y);



Die Frage ist für den einen oder anderen ziemlich simple aber ich komme nicht drauf. Ich möchte die erste Koordinate in einer Array zeichen, ich rufe einfach die Funktion saveArray auf, die Parameter möchte übergebe ich meinem Array.

Wenn ich meinen Array global definiere wird es nicht erkannt, wenn ich es lokal definiere bringt mir das nichts, da ich ja die Array auslesen möchte.

Ich habe in einem Buch gelesen, dass ich zwei Koordinaten in ein Array speichern kann und dann mit der Funktion glVertex aufrufen kann. Also so hier:


C++:

Int []point = {12,13};
glVertex2iv(point);




Kann mir bitte einer sagen, wie das machen kann, wie gesagt wenn ich meinen Array global definiere wird das nicht erkannt, local bringt mir das nichts.


Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.10.2006, 23:05 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja machs evtl so:


C++:
typedef struct point {
  unsigned int x;
  unsigned int y;
} point_t;

typedef struct line {
  point_t from;
  point_t to;
} line_t;

typedef struct polygon {
  std::vector <line_t> lines;
} polygon_t;

// globales dynamisches "array" für die polygone
std::vector <polygon_t> polygons;


void newpolygon()
{
  polygon_t pol;
  line_t l;

  // ka ob das nun ein dreieck ergibt, ist ja wurscht
  l.from = {5, 10};
  l.to = {15, 20};
  pol.lines.push_back(l);

  l.from = {20, 15};
  l.to = {15, 20};
  pol.lines.push_back(l);

  l.from = {25, 10};
  l.to = {15, 20};
  pol.lines.push_back(l);

  // polygon abspeichern
  polygons.push_back(pol);
}

void draw_polygons()
{
  std::vector<polygon_t>::iterator i = polygons.begin();
  while(i != poligons.end())
  {
    glBegin(GL_POLYGON);

    std::vector<line_t>::iterator j = (*i).lines;
    while(j != (*i).lines.end())
    {
       glVertex2i( (*j).from.x, (*j).from.y);
       glVertex2i( (*j).to.x, (*j).to.y);
       ++j;
    }

    glEnd();

    ++i;
  }
}



also so ungefähr würde ich das machen. Das erzeugen der polygone kannste natürlich auch alles nur aus linien zusammensetzen. Musst halt sehen wie du es willst.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.10.2006, 23:13 Uhr
elturco



Heyy danke Dir man, dass wird mir schon weiterhelfen, ich mein, ich werde das in OpenGL machen, muss die eine oder andere Funktion nochmal umändern, und das so machen, dass ich keine festgelegten Polygone zeichne sonder, individuel je nach Mausklick...

danke nochmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.10.2006, 23:15 Uhr
elturco



Ja, ich mein, mit festgelegten Koordinaten ist das ja nicht so schwer, ich überlege gerade wie das wohl mit individuellen ist, hast Du vielleicht ne Idee ?

wäre echt nett, wenn Du mir das auch noch sagen könntest
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.10.2006, 07:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du musst ja nur in der Art:


C++:
void OnLClick(point_t pos)
{
  static bool last = false;
  static line_t line;

  if(last) // anfang oder ende?
  {
     // ende
     line.to = pos;
     lines.push_back(line);
  }
  else
  {
     line.from = pos;
  }

  last = !last;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.10.2006, 14:31 Uhr
elturco



Hallo FloSoft,

ich habe noch eine Frage bitte...
Ich mache das ganze in OpenGL, bisher habe ich die Koordinaten vom Typ polygon gehabt, wie kann ich das denn meinem Vector Datenstrunktur vom Typ point zuweisen:
Ich habe also folgendes vorliegen:

C++:
struct point
{
    int x,y;

};
using namespace std;
vector<point> punktliste;

void speichern(point x, point q)
{    
    point punkt = (x,q);
    punktliste.push_back(punkt);
}


und dann noch hier:

C++:
void polyline(GLint button, GLint action, GLint xMouse, GLint yMouse)
{
    static polygon endPt1, endPt2;
    static float x,y;
    
    if(button == GLUT_RIGHT_BUTTON && action == GLUT_DOWN)
        {
            endPt1.x = xMouse;
            endPt1.y = winHeight - yMouse;
                    
            speichern(endPt1, endPt1);
            drawLineSegment(endPt1, endPt2);
                }
}



Kannst Du mir da bitte weiterhelfen ?

Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: