Конференция "Игры" » Подскажите в чем ошибка [Delphi]
 
  • akaValerius © (12.04.07 13:22) [0]
    В чам ошибка квадрат белый без текстуры.

    var
    .....
     Tex: GLuInt;
    implementation

    {$R *.dfm}
    procedure glGenTextures(N: GLSizei; Textures: PGLuInt); stdcall; external opengl32;
    procedure glBindTexture(Target: GLEnum; Texture: GLuInt); stdcall; external opengl32;
    function gluBuild2DMipmaps(Target: GLEnum; Components: GLInt;
     Width: GLInt; Height: GLInt; Format: GLEnum; _Type: GLEnum; Data: Pointer): GLInt; stdcall; external glu32;

    procedure TForm1.FormCreate(Sender: TObject);
    ...
     CreateTextures;
    ...
    procedure TForm1.CreateTextures;
    var
    Btex:TBitmap;
    i,j,color:Integer;
    TexData:array[0..255,0..255,0..2] of Byte;
    begin
     Btex:= TBitmap.Create;
     Btex.LoadFromFile('2.bmp');
     For j:= 0 to 255 do
      For i:= 0 to 255 do begin
       color:=BTex.Canvas.Pixels[j,i];
       TexData[i,j,0] := GetRValue(color);
       TexData[i,j,1] := GetGValue(color);
       TexData[i,j,2] := GetBValue(color);
      end;
     Btex.Free;
     { Generate textures }
     glGenTextures(1, @Tex);
     glBindTexture(GL_TEXTURE_2D, Tex);
     glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,
     256,256,0,GL_RGB,GL_UNSIGNED_BYTE,@TexData);
    end;

    procedure TForm1.Draw;
    begin
    wglMakeCurrent(Canvas.Handle, hrc);
    glEnable(GL_DEPTH_TEST);
    VHSPosition.SetProjection;
    glLoadMatrixf(@matidentity);
    VHSPosition.MoveForward(up);
    up:=0;
    VHSPosition.RotateY(angleY);
    VHSPosition.RotateX(angleX);
    {***************************************************}
    glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
     glTexParameteri( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR );
     glTexParameteri( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR );
     glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
      glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, Tex);

    glBegin(GL_QUADS);
     glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, -1.0);
     glTexCoord2f(1.0, 0.0); glVertex2f( 1.0, -1.0);
     glTexCoord2f(1.0, 1.0); glVertex2f( 1.0,  1.0);
     glTexCoord2f(0.0, 1.0); glVertex2f(-1.0,  1.0);
    glEnd;
    glBindTexture(GL_TEXTURE_2D, 0);

    SwapBuffers(Canvas.Handle);
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_DEPTH_TEST);
    wglMakeCurrent(0, 0);
  • Rial © (12.04.07 17:58) [1]
    Осмелюсь предположить, что ошибка либо тут:
    ...
    Либо тут:
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,
    256,256,0,GL_RGB,GL_UNSIGNED_BYTE,@TexData);


    Перечитай и изучи описание процедуры.

    А вообще, процедура отрисовки будет жутко тормозить.
    Вынеси из нее
    wglMakeCurrent(Canvas.Handle, hrc);
    wglMakeCurrent(0, 0);



    Удали вообще
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_DEPTH_TEST);
  • akaValerius © (12.04.07 22:20) [2]
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,
    256,256,0,GL_RGB,GL_UNSIGNED_BYTE,@TexData);
    Тут все нормал, я предпологаю что чтото связано с glBindTexture без нее все пашет, если просто
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,
    256,256,0,GL_RGB,GL_UNSIGNED_BYTE,@TexData);
 
Конференция "Игры" » Подскажите в чем ошибка [Delphi]
Есть новые Нет новых   [134428   +40][b:0][p:0.001]