- //*******************************************************************
- procedure DrawScene;
- const ambient : array[0..3] of GLFloat=(0.3,0.3,0.3,1);
- position1 : array[0..3] of GLFloat=(0.0,0.2,1.0,1);
- position2 : array[0..3] of GLFloat=(0.0,-0.2,1.0,1);
- direction1 : array[0..2] of GLFLoat=(0.0,0.0,-1.0);
- direction2 : array[0..2] of GLFLoat=(0.0,0.0,1.0);
- MatAMbient : array[0..3] of GLFloat=(0.0,0.2,0.6,1.0);
- MatEmission : array[0..3] of GLFloat=(0.3,0.3,0.9,1.0);
- var lauf1 : integer;
- lauf2 : integer;
- lauf3 : integer;
- lauf4 : integer;
- lauf5 : integer;
- lauf6 : integer;
- lauf7 : integer;
- lauf8 : integer;
- lwd : array[0..1] of glfloat;
- wdt : glfloat;
- step : glfloat;
- norm : TPoint;
- Area : TArea;
- logo : boolean;
- begin
- texture1 := auxDIBImageLoadA('granit.bmp');
- if not Assigned( texture1 ) then begin
- MessageBox(0,'Texturenpfad oder Dateiname falsch!'+#13+' Bitte den Pfad überprüfen!','Fehler beim Laden der Textur!',MB_OK or MB_ICONERROR);
- end;
- glGenTextures(1, tex);
- glBindTexture(GL_TEXTURE_2D, tex);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1^.sizeX, texture1^.sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
- glbindtexture(GL_Texture_2D,tex);
- logo:=true;
- glviewport(0,0,ebene.width,Ebene.height);
- glClearColor(0.6,0.6,0.6,1);
- glclear(GL_color_buffer_bit or gl_depth_buffer_bit);
- glenable(gl_texture);
- glMatrixMode(GL_PROJECTION);
- glEnable(GL_LIGHTING);
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT,@Ambient);
- glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,0.0);
- glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER,1.0);
- glMaterialfv(GL_FRONT, GL_AMBIENT, @MatAmbient);
- glMaterialfv(GL_FRONT, GL_EMISSION,@MatEmission);
- glMaterialf(GL_FRONT, GL_SHININESS, 50);
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHT1);
- glLightfv(GL_LIGHT0,GL_AMBIENT,@Ambient);
- glLightfv(GL_LIGHT0,GL_POSITION,@Position1);
- glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,@Direction1);
- glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,90);
- glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,10);
- glLightfv(GL_LIGHT1,GL_AMBIENT,@Ambient);
- glLightfv(GL_LIGHT1,GL_POSITION,@Position2);
- glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,@Direction2);
- glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,90);
- glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,10);
- glgetfloatv(gl_line_width_range,@lwd);
- glgetfloatv(gl_line_width_granularity,@step);
- gllinewidth(lwd[1]/4);
- glbegin(gl_line_strip);
- glFrontFace(GL_CW);
- glcolor3f(1,1,1);
- glvertex3f(0,-0.2,0);
- glvertex3f(0,0.2,0);
- glend;
- glbegin(gl_line_strip);
- glFrontFace(GL_CW);
- glcolor3f(1,1,1);
- glvertex3f(-0.2,0,0);
- glvertex3f(0.2,0,0);
- glend;
- glbegin(gl_line_strip);
- glFrontFace(GL_CW);
- glcolor3f(1,1,1);
- glvertex3f(0,0,-0.2);
- glvertex3f(0,0,0.2);
- glend;
- glbegin(gl_triangle_strip);
- glFrontFace(GL_CW);
- glTexCoord2f(0,0);glvertex3f(d3x[1],d3y[1],d3z[1]);
- lauf7:=0;
- lauf8:=BLINDEX[2];
- for lauf1:=1 to BLMAX-1 do
- begin
- lauf3:=BLINDEX[lauf1];
- lauf4:=BLINDEX[lauf1+1];
- lauf5:=1;
- lauf6:=0;
- for lauf2:=2 to max(BLINDEX[lauf1],BLINDEX[lauf1+1]) do
- begin
- lauf5:=lauf5+1;
- if lauf5>lauf3 then
- lauf5:=lauf3;
- lauf6:=lauf6+1;
- if lauf6>lauf4 then
- lauf6:=lauf4;
- gltexcoord(1/1);glvertex3f(d3x[lauf8+lauf6],d3y[lauf8+lauf6],d3z[lauf8+lauf6]);
- gltexcoord(0/0);glvertex3f(d3x[lauf7+lauf5],d3y[lauf7+lauf5],d3z[lauf7+lauf5]);
- if logo then
- begin
- Area[1][1]:=d3x[lauf7+1];
- Area[1][2]:=d3y[lauf7+1];
- Area[1][3]:=d3z[lauf7+1];
- Area[2][1]:=d3x[lauf7+lauf5];
- Area[2][2]:=d3y[lauf7+lauf5];
- Area[2][3]:=d3z[lauf7+lauf5];
- Area[3][1]:=d3x[lauf8+lauf6];
- Area[3][2]:=d3y[lauf8+lauf6];
- Area[3][3]:=d3z[lauf8+lauf6];
- logo:=false;
- end else begin
- Area[3][1]:=d3x[lauf8+lauf6-1];
- Area[3][2]:=d3y[lauf8+lauf6-1];
- Area[3][3]:=d3z[lauf8+lauf6-1];
- Area[2][1]:=d3x[lauf7+lauf5];
- Area[2][2]:=d3y[lauf7+lauf5];
- Area[2][3]:=d3z[lauf7+lauf5];
- Area[3][1]:=d3x[lauf8+lauf6];
- Area[3][2]:=d3y[lauf8+lauf6];
- Area[3][3]:=d3z[lauf8+lauf6];
- end;
- norm:=GetNormal(Area);
- glnormal3f(norm[1],norm[2],norm[3]);
- end;
- glend;
- glbegin(gl_line_strip);
- glFrontFace(GL_CCW);
- gllinewidth(lwd[1]/2);
- glcolor3f(1.0,0.0,0.0);
- glvertex3f(d3x[lauf7+1],d3y[lauf7+1],d3z[lauf7+1]);
- glvertex3f(ax[lauf7+1],ay[lauf7+1],d3z[lauf7+1]);
- glcolor3f(0.5,0.5,0.0);
- glvertex3f(E3X[lauf8],E3Y[lauf8],E3Z[lauf8]);
- glend;
- glbegin(gl_triangle_strip);
- glFrontFace(GL_CW);
- lauf8:=lauf8+BLINDEX[lauf1+1];
- lauf7:=lauf7+BLINDEX[lauf1];
- logo:=true;
- glTexCoord2f(0,0);glvertex3f(d3x[lauf7+1],d3y[lauf7+1],d3z[lauf7+1]);
- end;
- glend;
- swapbuffers(DC);
- end;
- //*******************************************************************