---- Ao desenvolver programas gráficos, especialmente programas gráficos tridimensionais, escolhi DelphiOpenGL porque senti que OpenGL não era tão complicado quanto DirectX. Em termos de sensação, Delphi não era tão complicado quanto C++ e era mais fácil de usar. então escolhi Delphi+ para fazer o trabalho. No processo, encontrei (definitivamente) alguns problemas e gostaria de expressar minha esperança de poder me comunicar com meus amigos.
----A primeira é a inicialização. Durante a inicialização, diversas tarefas precisam ser executadas: ① Criar uma tabela de descrição do dispositivo (Contexto do Dispositivo). (Nota: Em relação ao DC, as traduções de vários materiais são diferentes, como ambiente do dispositivo, tabela de descrição do dispositivo, contexto do dispositivo, etc., mas não parecem muito apropriadas. Seria ótimo se pudesse haver um tradutor como Li Shanlan. A situação do RC abaixo é a mesma)②Defina o formato de pixel correspondente (PIXELFORMAT DESCRipTOR). ③Crie uma tabela de descrição de renderização (contexto de renderização). Existem várias maneiras de obter ou criar tabelas de contexto de dispositivos no Delphi. O mais simples é obter diretamente o atributo handle (Handle) do objeto canvas (TCanvas), como:
DC: HDC; DC: = Canvas.Handle; você também pode usar a função API GetDC para obter a tabela de descrição do dispositivo. Tais como: DC:=GetDC(Handle, DC);
---- Você também pode usar a função CreateCompatibleDC ou BeginPaint..EndPaint (você precisa prestar atenção na diferença entre elas) para obter a tabela de descrição do dispositivo. No entanto, depois que a tabela de descrição do dispositivo se esgotar, lembre-se de liberá-la ou excluí-la para liberar recursos. Depois de ter acesso à tabela de contexto do dispositivo, você pode definir o formato de pixel correspondente. O formato Pixel é um tipo de registro com alguns campos ou campos de pouca utilidade (pelo menos por enquanto). Depois que a descrição do formato de pixel for concluída, chame as funções ChoosePixelFormat e SetPixelFormat para corresponder e defini-la com a tabela de descrição do dispositivo. Como o seguinte código:
função SetupPixelFormat(var dc:HDC):Boolean;var ppfd:PPIXELFORMATDESCRIPTOR; npixelformat:Integer;begin New(ppfd^.nSize:=sizeof(PIXELFORMATDESCRIPTOR); =PFD_DRAW_TO_WINDOW ou PFD_SUPPORT_OPENGL ou PFD_DOUBLEBUFFER; ppfd^.cColorBits:=ppfd^.cDepthBits:=16; ppfd^.cStencilBits:=0; npixelformat:=ChoosePixelFormat(dc, ppfd); if (nPixelformat=0) então comece MessageBox(NULL, 'choosePixelFormat failed', 'Error', MB_OK); ; se (SetPixelFormat(dc, npixelformat, ppfd)= FALSE) então comece MessageBox(NULL, 'SetPixelFormat failed', 'Error', MB_OK); var Exit; pfd: PixelFormatDescriptor; nPixelFormat: Inteiro;início FillChar(pfd,SizeOf(pfd),0); com pfd começa nSize:=sizeof(pfd); cDepthBits:=32; iLayerType:=Byte(PFD_MAIN_PLANE); nPixelFormat:=ChoosePixelFormat(DC,@pfd); Use DescribePixelFormat para verificar se o formato de pixel está definido corretamente DescribePixelFormat(DC,nPixelFormat,SizeOf(pfd),@pfd); if (pfd.dwFlags and PFD_NEED_PALETTE) < > 0 then SetupPalette(DC,pfd);//SetupPalette é um função personalizada }end;
---- Após a conclusão do trabalho acima, é melhor executá-lo novamente e verificar o valor de nPixelFormat. Normalmente este valor deve ser maior que 0, caso contrário haverá problema. Para o mesmo código, posso obter o valor correto maior que 0 na máquina NT, mas não o valor correto na máquina PWIN97 ou 98. No entanto, não haverá problema ao compilar e, após compilar no NT, também pode ser. usado na máquina PWIN97 Execute corretamente. Agora é hora de criar o contexto de sombreamento (RC). Chame as funções wglCreateContext e wglMakeCurrent, conforme mostrado no exemplo a seguir:
RC: HGLRC; RC:=wglCreateContext(DC); wglMakeCurrent(DC,RC); wglMakeCurrent(0,0); se RC< >null então wglDeleteContext(RC); se ghDC< >null então ReleaseDC(Handle,DC);
---- O código a seguir foi adaptado do exemplo OpenGL no C++Builder 4. O tamanho do programa compilado é de cerca de 300K, enquanto o tamanho do programa compilado no C++Builder 4 é de 384K.
---- < a href="061403-05.zip ">Código do programa Zip 3KB
---- As funções OpenGL e o formato de pixel do programa são explicados em detalhes no MSHelp em Delphi. Este artigo não se atreve a explicar mais.