Texture OpenGl

Généralités sur la programmation 3D
Scrat
Messages : 86
Inscription : sam. 15/mars/2008 16:00

Texture OpenGl

Message par Scrat »

Bonjour

J'essaye de transformer une image purebasic en une texture Opengl
j'ai essayé avec un tableau statique puis une zone memoire, mais j'obtiens toujours un joli quad tout blanc

Code : Tout sélectionner

Procedure LoadGlTexture(NumTexture,Fichier.s)
Img=LoadImage(#PB_Any,Fichier)
Wi=ImageWidth(Img)
Hi=ImageHeight(Img)
  
; Dim OpenGlData.c(Wi*Hi,4)
; c = 0
; 
; StartDrawing(ImageOutput(Img))
; For j = 0 To Hi - 1 
;   For i = 0 To Wi - 1 
;     Color = Point(i, j)
;     OpenGLData(c,0) = Red(color)
;     OpenGLData(c,1) = Green(color)
;     OpenGLData(c,2) = Blue(color)
;     OpenGlData(c,3)= Alpha(color)
;     c+1
;   Next i
; Next j                                  
; StopDrawing()


*Mem=AllocateMemory(Wi*Hi*4)
StartDrawing(ImageOutput(Img))
P=0
For H=0 To Hi-1
  For W=0 To Wi-1
    Color = Point(W, H)
    PokeB(*Mem+P,Red(color))
    P+1
    PokeB(*Mem+P,Green(color))
    P+1
    PokeB(*Mem+P,Blue(color))
    P+1
    PokeB(*Mem+P,Alpha(color))
    P+1
  Next W
Next H
StopDrawing()

glBindTexture_(#GL_TEXTURE_2D, TabTexture(NumTexture))
glTexParameterf_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_S,#GL_CLAMP_TO_EDGE)
glTexParameterf_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_T,#GL_CLAMP_TO_EDGE)
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,#GL_RGBA, Wi, Hi, 0, #GL_RGBA, #GL_UNSIGNED_BYTE,*Mem)
FreeMemory(*Mem)
;Dim OpenGlData(0,0)
FreeImage(Img)

EndProcedure  
J'ai fais le tour des forums PB mais je ne trouve pas grand chose.
Le sujet a pourtant du déja être evoqué.

Si vous avez un lien ou une idée, merci par avance
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Texture OpenGl

Message par G-Rom »

Ouvre d'abord un écran OpenGL.
@+
Scrat
Messages : 86
Inscription : sam. 15/mars/2008 16:00

Re: Texture OpenGl

Message par Scrat »

Salut

Le pb vient tout simplement du drawingmode qu'il faut utiliser avec une methode de blendig par ex DrawingMode(#PB_2DDrawing_AlphaBlend)
et comme ça on recupère bien la valeur Alpha par le Point()
Sinon la valeur alpa reste à 0 et evidement on voit pas la texture car full transparente.

Pb résolu.

Par contre ça ne fonctionne pas avec un tableau statique qui pourtant doit être une zone de mémoire contigue.

A+
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Texture OpenGl

Message par G-Rom »

Répondre