How can i draw a textured triangle in max2d?
BlitzMax Forums/BlitzMax Programming/How can i draw a textured triangle in max2d?
| ||
Max2D cannot draws textured triangles, so i think i need mix max2d with ogl. How can i do it without problems? |
| ||
Well. You can't draw a textured triangle in Max2D. You can draw a textured Quad which is two triangles, using DrawImage. This page has an introduction to using textures in OpenGL: http://www.gamedev.net/reference/articles/article947.asp |
| ||
actually you can if you don't mind going slightly low level. glbegin(GL_TRIANGLES) 'el code' glmultitexcoord3f unit,u,v,0 glvertex2f screenpixelx,screenpixely gl'etc glEnd() - i did this to create custom styles in a game i never finished(another one..) mark's 2d stuff sets up gl so the above is all you have to do gl wise. you should then just have to look through max2d to find the bit of code mark uses to bind max2d images to the texture units and pre-cded the above with it. |
| ||
Going to a lower level is not Max2D, it's direct OpenGL, which is different. I do agree you can easily draw your own triangles with textures using direct OpenGL commands. |
| ||
Thanks, I used direct OpenGL and I made this:' Prueba para pintar triangulos con textura. ' http://www.blitzbasic.com/Community/posts.php?topic=48462 Strict Local texturaGL : Int Local imagen : TImage Local trisList : TList SetGraphicsDriver(GLMax2DDriver()) Graphics(800,600,16,NOSYNC) texturaGL% = bglTexFromPixmap%(LoadPixmap:TPixmap("max.png")) imagen = LoadImage("max.png") trisList = New TList For Local cont1=1 To 50 'Adding triangles to triangle list Local tris : TTriangle tris = New TTriangle tris.SetXY([RndFloat()*600.0,RndFloat()*600.0,RndFloat()*600.0,RndFloat()*600.0,RndFloat()*600.0,RndFloat()*600.0]) tris.SetUV([RndFloat(),RndFloat(),RndFloat(),RndFloat(),RndFloat(),RndFloat()]) tris.SetRGBA([RndFloat(),RndFloat(),RndFloat(),RndFloat(), RndFloat(),RndFloat(),RndFloat(),RndFloat(), RndFloat(),RndFloat(),RndFloat(),RndFloat()]) tris.SetGLTexture(Rand(0,1)*texturaGL%) tris.SetBlendMode(ALPHABLEND) trisList.AddLast(tris:TTriangle) Next While ( Not KeyDown(KEY_ESCAPE) ) 'Main Local time : Int time% = MilliSecs() TTriangle.RenderTriangleList(trisList:TList) time% = MilliSecs()-time% DrawText("DrawText function test. RenderTriangleList time: " + String(time%), 10,10) DrawImage(imagen,MouseX(),MouseY()) Flip() Cls() FlushMem() Wend Type TTriangle Field xy : Float[6] Field uv : Float[6] Field rgba : Float[12] Field glTexture : Int Field blendMode : Int Function RenderTriangleList( triangleList:TList ) Local tris : TTriangle If (triangleList:TList) For tris:TTriangle = EachIn triangleList:TList If (tris.glTexture%) glBindTexture(GL_TEXTURE_2D,tris.glTexture%) glEnable(GL_TEXTURE_2D) EndIf SetBlend(tris.blendMode%) glBegin(GL_TRIANGLES) glTexCoord2f(tris.uv[0],tris.uv[1]) 'coorner A glcolor4f(tris.rgba[0],tris.rgba[1],tris.rgba[2],tris.rgba[3]) glVertex2f(tris.xy[0],tris.xy[1]) glTexCoord2f(tris.uv[2],tris.uv[3]) 'coorner B glcolor4f(tris.rgba[4],tris.rgba[5],tris.rgba[6],tris.rgba[7]) glVertex2f(tris.xy[2],tris.xy[3]) glTexCoord2f(tris.uv[4],tris.uv[5]) 'coorner C glcolor4f(tris.rgba[8],tris.rgba[9],tris.rgba[10],tris.rgba[11]) glVertex2f(tris.xy[4],tris.xy[5]) glEnd() Next SetColor(255.0,255.0,255.0) SetAlpha(1.0) EndIf End Function Function RenderTriangle( tris:TTriangle ) If (tris.glTexture%) glBindTexture(GL_TEXTURE_2D,tris.glTexture%) glEnable(GL_TEXTURE_2D) EndIf SetBlend(tris.blendMode%) glBegin(GL_TRIANGLES) glTexCoord2f(tris.uv[0],tris.uv[1]) 'coorner A glcolor4f(tris.rgba[0],tris.rgba[1],tris.rgba[2],tris.rgba[3]) glVertex2f(tris.xy[0],tris.xy[1]) glTexCoord2f(tris.uv[2],tris.uv[3]) 'coorner B glcolor4f(tris.rgba[4],tris.rgba[5],tris.rgba[6],tris.rgba[7]) glVertex2f(tris.xy[2],tris.xy[3]) glTexCoord2f(tris.uv[4],tris.uv[5]) 'coorner C glcolor4f(tris.rgba[8],tris.rgba[9],tris.rgba[10],tris.rgba[11]) glVertex2f(tris.xy[4],tris.xy[5]) glEnd() SetColor(255.0,255.0,255.0) SetAlpha(1.0) End Function Method Render() If (glTexture%) glBindTexture(GL_TEXTURE_2D,glTexture%) glEnable(GL_TEXTURE_2D) EndIf SetBlend(blendMode%) glBegin(GL_TRIANGLES) glTexCoord2f(uv[0],uv[1]) 'coorner A glcolor4f(rgba[0],rgba[1],rgba[2],rgba[3]) glVertex2f(xy[0],xy[1]) glTexCoord2f(uv[2],uv[3]) 'coorner B glcolor4f(rgba[4],rgba[5],rgba[6],rgba[7]) glVertex2f(xy[2],xy[3]) glTexCoord2f(uv[4],uv[5]) 'coorner C glcolor4f(rgba[8],rgba[9],rgba[10],rgba[11]) glVertex2f(xy[4],xy[5]) glEnd() SetColor(255.0,255.0,255.0) SetAlpha(1.0) End Method Method SetXY( newXY:Float[] ) If (newXY.length=6) MemCopy(xy,newXY,24) End Method Method SetUV( newUV:Float[] ) If (newUV.length=6) MemCopy(uv,newUV,24) End Method Method SetRGBA( newRGBA:Float[] ) If (newRGBA.length=12) MemCopy(rgba,newRGBA,48) End Method Method SetGLTexture( newGLTexture:Int ) glTexture% = newGLTexture% End Method Method SetBlendMode( newBlendMode:Int ) blendMode% = newBlendMode% End Method End Type |
| ||
Can someone say the essential changes for Blitz Max 1.6 EDIT: The bGLTexFromPixmap has changed to GLTexFromPixmap And the FlushMem is dead (Delete the line). Edit2: A simpler example Edit3: The codeBox is gone. |
| ||
You need my textured poly module :P |
| ||
I thing that this is better. I replaced the glBindTexture(GL_TEXTURE_2D,tris.glTexture%) and the glEnable(GL_TEXTURE_2D) with the EnableTex GLTexture and I created a Function called DrawTexQuad Edit1: I created the GLTexture from an TImage and now the MASKBLEND works for the textured QUAD pls try this : I think this is 100% stable. If anyone finds a problem pls post. |