������ - ����� - ������������ - ���������
������ ������ ���� ��������: TankoDrom
Mod-Portal > GameDev > �������
Zander
����� 2D.
����� - ����� ������, "Zander"
������ ����������� 2�-����. ����������, ���������, ���� ������ ������. � ��������.

���������� � ����:
WASD - ��������
������ ��� ��� - �������
Escape - �����
F12 - �����
�������� ������.

���������� ������ ������������ - ���� ��� �����, ��� ����������� ����� ��������� �����.
������ �� ����� ���������� ������ - ������� �������� ��� �������� �������� �����
������ ����� ���� ����� �� �����. ��������� ���� ���������� � ����������� �� ���� ������� �� ��� ����������,
��� ��� ���������� ������������ ����� �� ���������)

������� ������ ��������� �������� ���� ����, �������� ��� ��� �����, �� ����� ������ �������� � ��� �� �������. ����� ���� �� ����������.
stunder
� ���� ���������� ������������ �� �������� �����, �� � ����� ������ �������, � ����� � ������
Zander
����, ������ ����� ��� ��� ����������
����� � �������, ��� � ����������� �������� �������. ��� ����� ��������� ������ ������ � ���������� � Delphi - OpenGL.
��������, ��������� ����� ������� ������� ���� �� � �������� ����� ����, � ������� �� ������������� ������ ���� ������������ ������.
��� �� �����, ��� ��� ���������� �� ������ � ����������������� OpenGL � Delphi, � �� ������������ �������� ������� ��� ������:
http://www.delphisources.ru/pages/faq/base..._beginners.html
http://www.delphisources.ru/pages/faq/base...beginners2.html
����, ������.
���
uses
   OpenGL, Jpeg;
...
var

  Bm: TBitmap;
  TxBits: array [0..255,0..255,0..2] of Glubyte;
  TexObj : Array [0..10] of GLUint;

��������� ������ ��� ��������� OpenGL;

���
procedure glGenTextures (n: GLsizei; textures: PGLuint); stdcall; external opengl32;
procedure glBindTexture (target: GLEnum; texture: GLuint); stdcall; external opengl32;
procedure glTexSubImage2D (target: GLEnum; level, xoffset, yoffset: GLint; width, height: GLsizei; format,
    atype: GLEnum; pixels: Pointer); stdcall; external opengl32;
procedure glDeleteTextures (n: GLsizei; textures: PGLuint); stdcall; external opengl32;


� ������ ���������� ��� ����� ��������:

���
procedure LoadBMPTexture(file_name: string);
var
i,j: integer;
begin
    Bm:= TBitmap.Create;
    Bm.LoadFromFile(file_name);

    For i:= 0 to 255 do
    For j:= 0 to 255 do begin
       TxBits[j,i,0]:= GetRValue(Bm.Canvas.Pixels[i,j]);
       TxBits[j,i,1]:= GetGValue(Bm.Canvas.Pixels[i,j]);
       TxBits[j,i,2]:= GetBValue(Bm.Canvas.Pixels[i,j]);
    end;
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
                 256, 256,     // texture size
                 0, GL_RGB, GL_UNSIGNED_BYTE, @TxBits);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST );
    Bm.Free;
end;

procedure LoadJPGTexture(file_name: string);
var
i,j: integer;
JpegIm: TJpegImage;
begin
    Bm:= TBitmap.Create;
    JpegIm:= TJpegImage.Create;
    JpegIm.LoadFromFile(file_name);
    Bm.Assign(JpegIm);

    For i:= 0 to 255 do
    For j:= 0 to 255 do begin
       TxBits[j,i,0]:= GetRValue(Bm.Canvas.Pixels[i,j]);
       TxBits[j,i,1]:= GetGValue(Bm.Canvas.Pixels[i,j]);
       TxBits[j,i,2]:= GetBValue(Bm.Canvas.Pixels[i,j]);
    end;
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
                 256, 256,     // texture size
                 0, GL_RGB, GL_UNSIGNED_BYTE, @TxBits);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
    glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST );
    Bm.Free;
    JpegIm.Free;
end;

procedure LoadTextures;
var
a: integer;
fl: TStringList;
texfileext: string;
begin
    fl:= TStringList.Create;
    fl.LoadFromFile('texturesfiles.txt');
    // ��������� ������ ������ �������
    if (fl.Count       //* generate texture object IDs */
    glGenTextures( 10, @TexObj );
    a:= 0;
    while (a     // ���������� ����� ������ � ������
    begin
    texfileext:= Copy(fl.Strings[a],Length(fl.Strings[a]) - 2,3);
    // �������, ��� �� ���� ��� ������� - jpg ��� ���.
    If (texfileext = 'jpg') then
    begin
    LoadJPGTexture(fl.Strings[a]);
    end
    else begin
    LoadBMPTexture(fl.Strings[a]);
    end;
       //* setup first texture object */
    glBindTexture( GL_TEXTURE_2D, TexObj[a] );
    a:= a + 1;
    end;

    fl.Free;
end;


������ � FormCreate ���������� �������
���
LoadTextures;

� �������� ����� ��������� � ������ ���������� ��� ������ ���������������� ���������.
� ���� ������� � ����������� ������ �� 10 ������� �������� 256 � 256. ��� ������� ��� ����� �������� - ����� ������� ������ ���������, ���������� ����������� �� ��� LoadTextures, ��������� ��� ������� �� �� ��� ��� ����� � �� �������� �������� ������ ������� TexObj.
��� �������� ������� �������. ��� ��� ��� ��� �� ����, ������ �� ������� ����� ���� ���� �����-���� �������� ������. �.�. �������� 2,4,8,16,32,64,128,256 � �.�. ��� ��� �������� �������� 1024 � 256 ����� ���� ���������, � 1000 � 300 - ���.
�� ����� ���� ������� ���������� ������� �������� ������� ������ �������, �� �� ������ �� ������� �� �����, ��� ������� ����� ������.
����, � ���� ������� � ����������� ������������ ������ ������� 256 � 256. ��� ������������ ��������
���
TxBits: array [0..255,0..255,0..2] of Glubyte;

��� ������, ��������� LoadBMPTexture ���������� ���, ��� ��������������� ��������� ���� ������ � ����� �������� ������ � ������ ����������.
LoadJPGTexture ���������� ��� �� �����, ������ ����������� ������ �� jpg �����.
� ���, ���� ��������� - ������ ������ ��� �������� ������� �� ���������� ����� texturesfiles.txt

��� ��� �� � ����� ����������? ����������� ����������� - �������� - ����������� � ������ ����������, ��� ���� ������ �������� ������������� ����� - ����� �����. � ������ ������ ��� ���������� � ��� �� �������, � ������� ���� �������� � ������, ������� � 0.
������, ����� ������� �����-���� �������� �� ������ ���������� � ���������� �� �� ���-������, ��� ����������� ����� ������ �� �����.

��������� ��������� ������ ��������� �������������� ��������� �������� ���������, � 2� � 3�.

���
procedure TexturedQuad(x,y,h,w,tid: integer);
// ��������� ����������������� �������������� � 2�
// x,y - ����������: h,w - �������: tid - ����� �������� ������� ����� ������������
begin
    glEnable(GL_TEXTURE_2D);
    if HaveTexObj
    then glBindTexture( GL_TEXTURE_2D, TexObj[tid] )
    else glCallList( TexObj[tid] );
    glBegin(GL_QUADS);

       glTexCoord2f(0,1);  glVertex2f(x,y);
       glTexCoord2f(0,0);  glVertex2f(x,y+h);
       glTexCoord2f(1,0);  glVertex2f(x+w,y+h);
       glTexCoord2f(1,1);  glVertex2f(x+w,y);
    glEnd;
    glDisable(GL_TEXTURE_2D);
end;

procedure TexturedQuad3d(p: T3dPoint; h,w,tid: integer);
// ��������� �������� ����������������� �������������� � 3�.
// p - ���������� � 3�, ��������� ��� �������
begin
    glEnable(GL_TEXTURE_2D);
    if HaveTexObj
    then glBindTexture( GL_TEXTURE_2D, TexObj[tid] )
    else glCallList( TexObj[tid] );
    glBegin(GL_QUADS);

       glTexCoord2f(0,1);  glVertex3f(p.X,p.Y,p.Z);
       glTexCoord2f(0,0);  glVertex3f(p.x,p.Y+h,p.z);
       glTexCoord2f(1,0);  glVertex3f(p.x+w,p.y+h,p.z);
       glTexCoord2f(1,1);  glVertex3f(p.x+w,p.Y,p.z);
    glEnd;
    glDisable(GL_TEXTURE_2D);
end;

procedure TexCube(x,y,z,xs,ys,zs: extended; tid: integer);
// ��������� ������, ��������� ���������. � 3�.
// x,y,z - ����������; xs,ys,zs - ������� ������; tid - ����� ��������
begin
   glShadeModel(GL_FLAT);
   glEnable(GL_TEXTURE_2D);
   if HaveTexObj
    then glBindTexture( GL_TEXTURE_2D, TexObj[tid] )
    else glCallList( TexObj[tid] );
        glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
        glBegin(GL_QUAD_STRIP);

        glTexCoord2f(0,0);             glVertex3f(x,y,z);
        glTexCoord2f(0.5,0);          glVertex3f(x,y,z + zs);
        glTexCoord2f(0,0.25);        glVertex3f(x,y + ys,z);
        glTexCoord2f(0.5,0.25);      glVertex3f(x,y + ys,z + zs);
        glTexCoord2f(0,0.5);          glVertex3f(x + xs,y + ys,z);
        glTexCoord2f(0.5,0.5);       glVertex3f(x + xs,y + ys,z + zs);
        glTexCoord2f(0,0.75);        glVertex3f(x + xs,y,z);
        glTexCoord2f(0.5,0.75);      glVertex3f(x + xs,y,z + zs);
        glTexCoord2f(0,1);             glVertex3f(x,y,z);
        glTexCoord2f(0.5,1);          glVertex3f(x,y,z + zs);
        glEnd;

        glBegin(GL_QUADS);

        glTexCoord2f(0.5,0);        glVertex3f(x,y,z);
        glTexCoord2f(1,0);          glVertex3f(x + xs,y,z);
        glTexCoord2f(1,0.5);        glVertex3f(x + xs, y + ys,z);
        glTexCoord2f(0.5,0.5);      glVertex3f(x,y + ys,z);
        glTexCoord2f(0.5,0.5);      glVertex3f(x,y,z + zs);
        glTexCoord2f(1,0.5);        glVertex3f(x + xs,y,z + zs);
        glTexCoord2f(1,1);          glVertex3f(x + xs, y + ys,z + zs);
        glTexCoord2f(0.5,1);        glVertex3f(x,y + ys,z + zs);
        glEnd;
    glDisable(GL_TEXTURE_2D);
end;


�, �������, ����� �������� ��� ����� T3DPoint. ��� ��� ������ ������� � ��������� ��� ������� ��������� � 3�.
���
type
  T3DPoint = record
     X: extended;
     Y: extended;
     Z: extended;
  end;


� ��������, ����������� ��������� �������� �����. glTexCoord2f ������ ���������� ���������� ��� �������, ������� ����� ���������� ������.
������� ������ glVertex2f � 2� � glVertex3f � 3�. ��� ��� ��� �������� ����� �������� � �������, �� ������� � ����� ������ � ������. ��������� ��� ����� � ���� ��� ����� �� ������.
��� ��������� ��������� Draw � ������� �������, ��������� � ��� �� �������. ������� � ��� ������ ���� ��������, ����� ���-�� ����������.
��������
���
procedure Draw;
begin
glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
        TexCube(0,0,0,10,10,10,2);
        SwapBuffers(ghDC);

end;

�������� ����� �������� 10�10�10 � ������ ���������, ��� ��������� ����� ������������ �������� ��� ������� 2.
���������� ����� ��������, ��� ��� �������� ���� �������� ������������ ��������� �����������. �������� ��������, ����������� � ���� ������� �� ��������, ��������� �� ��������������� ������� ����. ���������� �������� ������������� ����� � ������������ �� ����� �� 4 ���������� �������. ����� ��� ����� ������ ������� �������� �������.
�� ����, ���� ���. �������, �������������� ������� - ��������������.
Xenus-Ghost
��������� ����� ������������� �����?� �� � �� ��� ������ ��� ����� ���� ����� 2����� ������� ��� ��� ������,���������� ����
stunder
�� ��� �����, ����� �� ������, �� �����
��� ��������� ������ ������ ���� ��������, ����������, �������� �� ������.
����� IP.Board © 2001-2011 IPS, Inc.