- var
- tex1 : TGLuint;
- CreateScreenTexture; - wird in FormCreate ausgeführt.
- procedure TForm1.CreateScreenTexture;
- var
- pTexData: Pointer;
- begin
- GetMem(pTexData, 256*256*3);
- // Textur generieren und drauf zeigen
- glGenTextures(1, @tex1);
- glBindTexture(GL_TEXTURE_2D, tex1);
- // Daten in den Speicher, Lineares Filtering aktivieren
- glTexImage2D(GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, pTexData);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- // Freigeben
- FreeMem(pTexData);
- end;
- procedure TForm1.Render;
- begin
- glClearColor(0.0,0.0,0.0,0);
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- glViewport(0, 0, 256, 256);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- gluPerspective(60, ClientWidth/ClientHeight, NearClipping, FarClipping);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- glEnable(GL_LINE_SMOOTH);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_TEXTURE_2D);
- glDisable(GL_CULL_FACE);
- glTranslatef(x, y, z);
- glRotatef(t, 0, 1, 0);
- glRotatef(t1, 0, 0, 1);
- glColor3f(1, 1, 1);
- glPushMatrix;
- Render2;
- glBindTexture(GL_TEXTURE_2D, tex1);
- glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 256, 256, 0);
- glClearColor(0,0.0,0.3,0);
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
- glViewport(0, 0, ClientWidth, ClientHeight);
- glBindTexture(GL_TEXTURE_2D,tex1);
- glPopMatrix;
- Action;
- SwapBuffers(DC);
- end;
- procedure TForm1.render2;
- var
- Quad2, Quad : PGLUquadric;
- begin
- glRotatef(90, 1, 0, 0);
- glTranslatef(-0.5, 0, 0);
- glColor3f(1,0.2,0.4);
- Quad := gluNewQuadric;
- gluCylinder(Quad, 0, 0.4, 1, 20, 20);
- glTranslatef(1, 0, 0.5);
- glColor3f(0.3,0.3,1);
- Quad2 := gluNewQuadric;
- gluCylinder(Quad2, 0, 0.4, 1, 20, 20);
- end;
- procedure TForm1.Action;
- begin
- // Screen links
- glBegin(GL_QUADS);
- glTexCoord2f(0,0); glVertex3f(-3, -1, 0);
- glTexCoord2f(0,1); glVertex3f(-3, 1, 0);
- glTexCoord2f(1,1); glVertex3f(-1, 1, -1);
- glTexCoord2f(1,0); glVertex3f(-1, -1, -1);
- glEnd;
- // Screen rechts
- glBegin(GL_QUADS);
- glTexCoord2f(0,0); glVertex3f(1, -1, -1);
- glTexCoord2f(0,1); glVertex3f(1, 1, -1);
- glTexCoord2f(1,1); glVertex3f(3, 1, 0);
- glTexCoord2f(1,0); glVertex3f(3, -1, 0);
- glEnd;
- // Screen links
- glBegin(GL_QUADS);
- glTexCoord2f(0,0); glVertex3f(-0.8, 0, -1);
- glTexCoord2f(0,1); glVertex3f(-0.8, 1.5, -1);
- glTexCoord2f(1,1); glVertex3f(0.8, 1.5, -1);
- glTexCoord2f(1,0); glVertex3f(0.8, 0, -1);
- glEnd;
- end;