wegnera hat geschrieben:Ein freundliches Hallo an alle.
Da ich gerade mit Lazarus und OpenGL zu arbeiten beginne, habe ich eine Frage hinsichtlich OpenGL. Ich verwende - auf Grund der Vorgaben der Schule - die Version 1.0.14 von Lazarus und somit das Package 0.0.1 von LazOpenGLContext. Nun bin ich auf der Suche nach nach eine Übersicht der in den units GL, GLU, GLUT zur Verfügung stehenden Befehle und Klassen, Variablen, ... die verwendet werden können.
Da die meisten Publikationen C-basiert sind, kann ich diese noch nicht auf Pascal übertragen.
Wer kann hier helfen? Gibt es auch Literatur, die Pascal bezogen OpenGL erklärt? Wo finde ich gute Beispiele anhand derer man lernen kann.
Danke euch im Voraus
Andreas
void
TexFunc(void)
{
glEnable(GL_TEXTURE_2D);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
#if GL_EXT_abgr
glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_ABGR_EXT,
GL_UNSIGNED_BYTE, ubImage);
glBegin(GL_POLYGON);
glTexCoord2f(1.0, 1.0);
glVertex3f(-0.2, 0.8, -100.0);
glTexCoord2f(0.0, 1.0);
glVertex3f(-0.8, 0.8, -2.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(-0.8, 0.2, -2.0);
glTexCoord2f(1.0, 0.0);
glVertex3f(-0.2, 0.2, -100.0);
glEnd();
#endif
glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGBA,
GL_UNSIGNED_BYTE, ubImage);
glBegin(GL_POLYGON);
glTexCoord2f(1.0, 1.0);
glVertex3f(0.8, 0.8, -2.0);
glTexCoord2f(0.0, 1.0);
glVertex3f(0.2, 0.8, -100.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(0.2, 0.2, -100.0);
glTexCoord2f(1.0, 0.0);
glVertex3f(0.8, 0.2, -2.0);
glEnd();
glDisable(GL_TEXTURE_2D);
}
procedure TexFunc;
begin
glEnable(GL_TEXTURE_2D);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
{$IfDef GL_EXT_abgr}
glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_ABGR_EXT,
GL_UNSIGNED_BYTE, ubImage);
glBegin(GL_POLYGON);
glTexCoord2f(1.0, 1.0);
glVertex3f(-0.2, 0.8, -100.0);
glTexCoord2f(0.0, 1.0);
glVertex3f(-0.8, 0.8, -2.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(-0.8, 0.2, -2.0);
glTexCoord2f(1.0, 0.0);
glVertex3f(-0.2, 0.2, -100.0);
glEnd();
{$EndIf}
glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGBA,
GL_UNSIGNED_BYTE, ubImage);
glBegin(GL_POLYGON);
glTexCoord2f(1.0, 1.0);
glVertex3f(0.8, 0.8, -2.0);
glTexCoord2f(0.0, 1.0);
glVertex3f(0.2, 0.8, -100.0);
glTexCoord2f(0.0, 0.0);
glVertex3f(0.2, 0.2, -100.0);
glTexCoord2f(1.0, 0.0);
glVertex3f(0.8, 0.2, -2.0);
glEnd();
glDisable(GL_TEXTURE_2D);
end;
program simpleshape2;
{$mode objfpc}{$H+}
uses
//gl, glu, glut;
gl, glu, glut, dglOpenGL;
const
AppWidth = 640;
AppHeight = 480;
procedure InitializeGL;
begin
glClearColor(0.18, 0.20, 0.66, 0);
end;
procedure DrawGLScene; cdecl;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
glTranslatef(0, 0, -5);
glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0);
glVertex3f(-1, -1, 0);
glColor3f(0, 1, 0);
glVertex3f(1, -1, 0);
glColor3f(0, 0, 1);
glVertex3f(0, 1, 0);
glEnd;
glutSwapBuffers;
end;
procedure ReSizeGLScene(Width, Height: Integer); cdecl;
begin
if Height = 0 then
Height := 1;
glViewport(0, 0, Width, Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45, Width / Height, 0.1, 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
end;
procedure GLKeyboard(Key: Byte; X, Y: Longint); cdecl;
begin
if Key = 27 then
Halt(0);
end;
procedure glutInitPascal(ParseCmdLine: Boolean);
var
Cmd: array of PChar;
CmdCount, I: Integer;
begin
if ParseCmdLine then
CmdCount := ParamCount + 1
else
CmdCount := 1;
SetLength(Cmd, CmdCount);
for I := 0 to CmdCount - 1 do
Cmd[I] := PChar(ParamStr(I));
glutInit(@CmdCount, @Cmd);
end;
var
ScreenWidth, ScreenHeight: Integer;
begin
glutInitPascal(True);
glutInitDisplayMode(GLUT_DOUBLE or GLUT_RGB or GLUT_DEPTH);
glutInitWindowSize(AppWidth, AppHeight);
ScreenWidth := glutGet(GLUT_SCREEN_WIDTH);
ScreenHeight := glutGet(GLUT_SCREEN_HEIGHT);
glutInitWindowPosition((ScreenWidth - AppWidth) div 2, (ScreenHeight - AppHeight) div 2);
glutCreateWindow('OpenGL Tutorial :: Simple Shape');
InitializeGL;
glutDisplayFunc(@DrawGLScene);
glutReshapeFunc(@ReSizeGLScene);
glutKeyboardFunc(@GLKeyboard);
glutMainLoop;
end.
uses
gl, glu, glut, dglOpenGL;
Zu deiner Frage: beginnen möchte ich wirklich am Anfang. Ich will die einzelnen Tutorien durcharbeiten und daran meine Erfahrungen sammeln.
habe die Abhängigkeit rausgenommen, nun funktioniert das Beispiel. Danke !!
damit er alle Units, Header und dlls für die Tutorial s auch richtig findet?
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste