OpenGL problem z modyfikacją kodu

0

Witam,
Pisze programik i obecnie tworzę zakładkę about. wykombinowałem sobie że bedzie tam ładna animacja, ale oczywsicie od podstaw animacji nie bede tworzył gif tez za mało. Stwierdziłem ze skorzystam z gotowca w OpenGl który obraca tło i wypisuje odpowiednie teksty. http://www.sulaco.co.za/opengl/NSFonts.zip no i teraz mam mały problemik z racji że nigdy nie pisałemniczego pod openGl mam problem z modyfikacją kodu, załadowałem te zrodła do mojego programu wrzucilem włąsne tło i napisy, dopasowałem wielkość ale teraz mam problem. Poniważ zrodła NSFonts sa tak skonstruowane ze po uruchomieniu tworzą nowe okno i tam wyświetlają odpowiednie obrazy. A ja chciałbym aby zamiast w nowym oknie animacja wyswietlała sie w aktualnym oknie programu w zakładce about (Form1.TabSheet9). Próbowałem to rozpracować ale jestem za kiepski, programuje hobbystycznie i zbyt duzo materiałow musiał bym przerobić aby sie w tym wsztkim połąpać. A to tylko okno about :/ Dlatego też mam nadziej ze znajdzie sie ktoś kto mi pomoże, bo zapewne dla wprawnego programisty to jest kilka minut roboty.

domyslam sie ze chodzi o zmiane tej wartości kodu ale moge sie mylic

h_Wnd := CreateWindowEx(dwExStyle,      // Extended window styles
                          'OpenGL',       // Class name
                          WND_TITLE,      // Window title (caption)
                          dwStyle,        // Window styles
                          0, 0,           // Window position
                          Width, Height,  // Size of window
                          0,              // No parent window
                          0,              // No menu
                          h_Instance,     // Instance
                          nil);
0

wedle tego co napisałeś spróbuj coś takiego:

h_Wnd:=Form1.TabSheet9.Handle;

przekażesz uchwyt twojej kontrolki zamiast uchwytu tego tworzonego okna(funkcja CreateWindowEx) ale nie ręczę, że to coś da, ponieważ nie wiem co zrobiłeś z resztą kodu.

ogólnie żeby coś narysować na kontrolce musisz pobrać jej kontekst graficzny, podając do funkcji jej uchwyt(Handle):

h_dc:=GetDC(Form1.TabSheet9.Handle);

potem musiałbyś go podpiąć pod OpenGL:

wglMakeCurrent(h_dc, 0);

mniej więcej takich fragmentów kodu poszukaj i spróbuj tam to podpiąć.
może coś wykombinujesz :)

0

Oczywiście, szacuneczek wyglada to dokładnie tak jak chcialem :) dziekuje bardzo :D jeszcze tylko przy zamykaniu proga musze wykombinowac zeby watek sie zamykał, bo wrzuclem proceure wykonujaca do watku zeby jak wychodze z zakładki zatrzymywała sie i nie obciazała kompa, ale to juz pikuś chyba :p

ps. obecnie jest suer zrobiłem ze obraz faluje w 3 wymiarach i w ogóle bajerki, ale jest kolejny problem mianowicie ja u siebie wszystko ustawiłem ale niestety, gdy kolega testuje na innym komputerez z procesorem core2 duo to jest lipa bo wszystko zasuwa strasznie szybko, czy da sie jakos ustawic parametr ktory jest rozny dla kazdego komputera w zaleznosci od jego szybkosci przetwarzania. W oryginalnych zrodłach jest ustawiony parametr ElapsedTime/100 ale niebardzo zdaje egzamin

  DemoStart := GetTickCount();            // Get Time when demo started
while not finished do
  begin
.....      
      LastTime :=ElapsedTime;
      ElapsedTime :=GetTickCount() - DemoStart;     // Calculate Elapsed Time
      ElapsedTime :=(LastTime + ElapsedTime) DIV 2; // Average it out for smoother movement
.....
end;
0

sęk w tym, że timer zastosowany w przykładzie ma czemuś takiemu przeciwdziałać i ogranicza ilość FPS do maksymalnej szybkości odświeżania monitora(żeby właśnie nie zużywać całej mocy procka), może twój kolega ma dużo lepszy monitor bo raczej jego procesor liczy czas tak samo jak twój. popróbuj pozmieniać parametry ElapsedTime i FPS_INTERVAL. możesz jeszcze coś z synchronizacja pokombinować http://www.sulaco.co.za/opengl_project_enabling_disabling_V-Sync_vertical_synchronization.htm. ale myślę, że problem leży gdzieś w kodzie a nie w sprzęcie.

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