Wpis z mikrobloga

#programowanie #grafika #opengl #glut

Znajdzie mi ktoś błąd w tej funkcji (c++)?

void draw(float PositionX, float PositionY)

{

glMatrixMode(GLMODELVIEW);

glPushMatrix();


glLoadIdentity();


glTranslatef(PositionX, PositionY, 0);


GLfloat RED = 1, GREEN = 1, BLUE = 1;


glColor3f(RED, GREEN, BLUE);


glBegin(GL
POLYGON);

glVertex2f(-0.1, 0.1);

glVertex2f(0.1, 0.1);

glVertex2f(0.1, -0.1);

glVertex2f(-0.1, -0.1);

glEnd();

glPopMatrix;

}
  • 10
@duffman: fajnie by było, jakbyś napisał, co się dzieje? Nic nie widać na ekranie po prostu?

EDIT: ech, nie doczytałem. Czyli się nie wyświetla. Możesz wkleić więcej kodu? Bo znaczenie może mieć np ustawianie glCullFace (zależnie od niego pokazuje obie strony poligonów, tylko ściany z wierzchołkami w koleności zgodnej z ruchem wskazówek zegara, albo przeciwnej). Albo może masz oświetlenie włączone i brak świateł i wszystko jest czarne. Może jest problem z
GLfloat RED = 1, GREEN = 1, BLUE = 1;


glColor3f(RED, GREEN, BLUE);


glBegin(GLPOLYGON);


glVertex2f(-0.1, 0.1);


glVertex2f(0.1, 0.1);


glVertex2f(0.1, -0.1);


glVertex2f(-0.1, -0.1);


glEnd();


glPopMatrix;

@duffman: Ta część tworzy na ekranie kwadrat.

glMatrixMode(GLMODELVIEW);

glPushMatrix();

glLoadIdentity();

glTranslatef(PositionX, PositionY, 0);

to teoretycznie powinno sprawić, że powyższy kwadrat będzie przesunięty względem środka okienka o przekazane funkcji argumenty, ale sprawia tylko, że funkcja nie działa. Zdaję sobie sprawę, że to przestarzała metoda, ale skopiowałem wszystko z
@tell_me_more:

Mam nadzieję, że skopiowałem wszystko- mam to w kilku pikach. Ale funkcja z zakomentowanym tym drugim fragmentem wyświetla kwadracik bez problemu.

#include

#include

#include

using namespace std;

void ZmienRozmiarEkranu(int w, int h)

{

float ratio = 1.0* w / h;

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0, 0, w, h); //ustalenie rzutni

gluPerspective(45, ratio, 1, 1000);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, -1.0, 0.0f, 1.0f, 0.0f);

}

void Przerysuj(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Ok, wg mnie to jest problem spowodowany tym, że po gluLookAt w ZmienRozmiarEkranu jest ustawiona macierz MODELVIEW dobrze, ale jak dodajesz ten kod w draw, który robi glLoadIdentity(); to czyścisz tą macierz na czas rysowania modelu. Wywal tą linijkę z draw i daj znać, czy pomogło.