ďťż

Ładny brzuch

Otóż chciałbym wzbogacić mój program do 3d o funkcję renderowania sceny do pliku BMP.
Próbowałem już zrobić to podmieniając obiekt, na którym renderowana jest grafika z Formy2 na zmienną bmp: TBitmap;
Ale nie przynosiło to, żadnych efektów, być może coś źle robiłem...
Kolejny sposób jaki próbowałem zastosować to zwykły screen z Formy2 przez kopię Canvasu z Formy2, ale wadą tego
rozwiązania było to, że gdy coś zasłaniało Formę2 to było wrysowane w screena dry.gif
A może jest jakaś funkcja biblioteczna robiąca screena do pliku?
Oczywiście chcę zrobić tak by przy renderowaniu do pliku można było ustawić wymiary obrazka (Width,Height owej bitmapy).

Jeśli to coś pomoże to zamieszczam fragmenty kodu:

Zmienne określające obiekt, na którym renderowany jest obraz:
var DC: HDC; RC: HGLRC;

Form2.OnCreate:
InitOpengl(Form2); // procedura inicjująca glShadeModel(GL_SMOOTH); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glBlendFunc(GL_SRC_ALPHA, GL_ONE); glDisable(GL_BLEND); glEnable(GL_TEXTURE_2D); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); if not GlutInit(MS_LIB) then MessageBox(Form1.Handle,'Zainicjowanie bibliteki glut nie powiodło się!','Informacja', MB_OK); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // przezroczystość glEnable(GL_BLEND); // przezroczystość

Procedury odpowiedzialne za inicjację:
procedure TForm2.InitOpengl(control: TWinControl); begin DC:=GetDC(control.Handle); SetupPixelFormat(DC); RC:=wglCreateContext(DC); if not wglMakeCurrent(DC,RC) then MessageBox(Form1.Handle,'Inicjalizacja OpenGL się nie powiodła!','Informacja',MB_OK); end; procedure TForm2.SetupPixelFormat(DC: HDC); const pfd: TPIXELFORMATDESCRIPTOR = ( nSize: sizeof(TPIXELFORMATDESCRIPTOR); // rozmiar struktury nVersion: 1; // wersja dwFlags: PFD_SUPPORT_OPENGL or // umożliwia użycie funkcji OpenGL PFD_DRAW_TO_WINDOW or // rysowanie bezpośrednio na ekranie PFD_DOUBLEBUFFER; // udostępnienie podwójnego buforowania iPixelType: PFD_TYPE_RGBA; // typ koloru RGBA cColorBits: 24; // kolor 24-bitowy cRedBits: 0; cRedShift: 0; // nie używane cGreenBits: 0; cGreenShift: 0; cBlueBits: 0; cBlueShift: 0; cAlphaBits: 0; cAlphaShift: 0; cAccumBits: 0; cAccumRedBits: 0; cAccumGreenBits: 0; cAccumBlueBits: 0; cAccumAlphaBits: 0; cDepthBits: 32; // wielkość bufora cStencilBits: 0; // nie używane cAuxBuffers: 0; iLayerType: PFD_MAIN_PLANE; // główna powłoka bReserved: 0; dwLayerMask: 0; dwVisibleMask: 0; // nie używane dwDamageMask: 0; ); var pixelFormatIndex:integer; begin pixelFormatIndex := ChoosePixelFormat(DC, @pfd); SetPixelFormat(DC, pixelFormatIndex, @pfd); end;

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •