Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML OpenGL] Dlaczego nie wyswietla gwiazd.

Ostatnio zmodyfikowano 2025-08-25 17:16
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[SFML OpenGL] Dlaczego nie wyswietla gwiazd.
» 2025-08-25 10:55:31
Dlaczego poniższy program nie wyświetla gwiazd? Proszę o korektę.

C/C++
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include <GL/gl.h>
#include <vector>
#include <cstdlib>
#include <ctime>

struct Star {
   
float x, y;
   
float size;
};

int main() {
   
// Inicjalizacja losowości
   
std::srand( static_cast < unsigned int >( std::time( nullptr ) ) );
   
   
// Tworzymy okno SFML
   
sf::RenderWindow window( sf::VideoMode( { 800, 600 } ), "Gwiazdy z GL_POINTS" );
   
window.setFramerateLimit( 60 );
   
   
// Tworzymy listę gwiazd
   
const int starCount = 100;
   
std::vector < Star > stars;
   
for( int i = 0; i < starCount; ++i ) {
       
stars.push_back( {
           
static_cast < float >( std::rand() % 800 ), // x
           
static_cast < float >( std::rand() % 600 ), // y
           
static_cast < float >(( std::rand() % 3 ) + 1 ) // rozmiar
       
} );
   
}
   
   
while( window.isOpen() ) {
       
       
while( const std::optional event = window.pollEvent() ) {
           
if( event->is < sf::Event::Closed >() )
               
 window.close();
           
       
}
       
       
// Czyszczenie ekranu
       
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
       
glLoadIdentity();
       
       
// Ustawienia OpenGL
       
glPointSize( 5.0f ); // rozmiar punktów
       
glBegin( GL_POINTS );
       
glColor3f( 1.0f, 0.0f, 0.0f );
       
for( const auto & star: stars ) {
           
glVertex2f( star.x, star.y );
       
}
       
glEnd();
       
       
// Wyświetlenie
       
window.display();
   
}
   
   
return EXIT_SUCCESS;
}
P-182912
tBane
» 2025-08-25 11:52:03
OpenGL przyjmuje wartości float z zakresu [-1;1]. Wystarczy znormalizować pozycje względem okna

C/C++
glBegin( GL_POINTS );
glColor3f( 1.0f, 0.0f, 0.0f );
for( const auto & star: stars ) {
   
glVertex2f( star.x / 800.0f, star.y / 600.0f );
}
glEnd();
P-182913
wojownik266
Temat założony przez niniejszego użytkownika
» 2025-08-25 12:24:01
Program działa tak jak dokładnie chciałem.... Dziękuję!
P-182914
« 1 »
  Strona 1 z 1