-
В чам ошибка квадрат белый без текстуры.
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);
-
Осмелюсь предположить, что ошибка либо тут: ... Либо тут: 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);
-
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);
|