Jak wyświetlić listę punktów w OpenGL?

0

Witajcie,

Przez wiele lat udawało mi się unikać tego tematu ale w końcu mnie on dopadł ... OpenGL. Na chwilę obecną mam taką potrzebę aby narysować w 3d "n" punktów (460x300). Każdy punkt ma swoje koordynaty (X,Y,Z) oraz swój kolor. Czy moglibyście mi podpowiedzieć jak zmienić kod z załącznika aby zamiast obracających się trójkątów mieć obracające się punkty?

Udało mi się zrobić coś takiego:

    glBegin(GL_POINTS);
    glVertex3f(0.25,0.25,0.0);
    glVertex3f(0.75,0.25,0.0);
    glVertex3f(0.75,0.75,0.0);
    glVertex3f(0.25,0.75,0.0);
    glEnd;
    glFlush;

ale nie wiem jak zmienić kolor poszczególnych pixeli.

0

glColor i jesteś good to go

Patrz np na javowy przykład http://www.felixgers.de/teaching/jogl/vertexArrayProg.html

0

Nie wiem co to znaczy obracające się punkty, ale do problemu nie wiem jak zmienić kolor poszczególnych pixeli. wykorzystaj glColor3f. Generalnie problem, który próbujesz rozwiązać to jakieś podstawy opisane w internecie z 10 lat temu na kursach NeHe (pogoogluj - warto). (Bo korzystasz z przestarzałego obecnie API OpenGL).

0

Takie coś:

glColor3f(1.0,0.0,0.0);
    glPointSize(5);
    glBegin(GL_POINTS);
    for i := 0 to 460 - 1 do
      for j := 0 to 300 - 1 do
        glVertex3f(i+0.06,j+0.06,0.35);
    glEnd;
    glFlush;

zwiększa rozmiar ale nie zmienia koloru

0

Kolor przypisuje się do każdego wierzchołka osobno.

No nie rozumiesz kompletnie podstaw (mówiłem: zobacz na ten kurs):

glBegin(GL_POINTS);
for (v: vertices) {
    glVertex3f(v.x, v.y, v.z);
    glColor3f(sin(v.x * v.y), cos(v.y), 0.5);
}
glEnd();

A Ty w poprzednim kodzie wrzuciłeś glColor3f nie wiadomo gdzie.

0

W taki sposób jak podałeś na moim przykładzie również nie działa:

glBegin(GL_POINTS);
    for i := 0 to 460 - 1 do
      for j := 0 to 300 - 1 do
      begin
        glVertex3f(i+0.06,j+0.06,0.35);
        glColor3f(0.5, 0.0, 0.5);
      end;
    glEnd;

Jeszcze jedno pytanie gdy podpinam to co mam już pod moją właściwą aplikację i zamiast i+0.06 wstawiam prawidłową wartość to nic mi się nie wyświetla. Przyczyną jest prawdopodobnie to, że tam są wartości np x = -358.58 y = 185.32 itp. Jak mniemam wylatuje to gdzieś poza obszar mojego frame. W jaki sposób mogę to "zzoomować" automatycznie aby użytkownik zobaczył wynik? Czytałem o tym glScalef lub glTranslatef ale nie bardzo mi idzie wyświetlanie tego.

1

Ok zrobiłem. Dla potomnych:

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glClearColor(255,255,255,0);
glLoadIdentity; //biezaca macierz = I
gluLookAt(0,0,KameraZ, //polozenie oka
  0,0,0,
  0,1,0); //kierunek "do gory"
glRotatef(Theta, 1.0, 0.0, 0.0); //wokol OX
glRotatef(Phi, 0.0, 1.0, 0.0); //wokol OY
RysujPunkty();

Theta i Phi wyliczam na podstawie ruchu myszy i wywołuję funkcję draw - powyższy blok kodu

procedure RysujPunkty();
var
  i, j: Integer;
begin
  glPointSize(2);
  for I := 0 to High(Stars)  do
  begin
    glBegin(GL_LINE_STRIP)
    for j := 0 to High(stars[i])  do
    begin
      glColor3ub(Round(stars[i,j].R),Round(stars[i,j].g), Round(stars[i,j].b));
      glVertex3i(stars[i,j].x,stars[i,j].y,stars[i,j].z);
    end;
    glEnd;
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1