Trial with drawing projected textures (not working).
This commit is contained in:
parent
4d05127c6d
commit
706bd379c6
@ -2,8 +2,35 @@ package allg5
|
||||
|
||||
// #include <allegro5/allegro.h>
|
||||
// #include <allegro5/allegro_primitives.h>
|
||||
/*
|
||||
void SetTransform(ALLEGRO_TRANSFORM* t, float ix, float iy, float iz, float jx, float jy, float jz, float kx, float ky, float kz)
|
||||
{
|
||||
t->m[0][0] = ix;
|
||||
t->m[0][1] = iy;
|
||||
t->m[0][2] = iz;
|
||||
t->m[1][0] = jx;
|
||||
t->m[1][1] = jy;
|
||||
t->m[1][2] = jz;
|
||||
t->m[2][0] = kx;
|
||||
t->m[2][1] = ky;
|
||||
t->m[2][2] = kz;
|
||||
}
|
||||
|
||||
bool SetTextureMatrix(ALLEGRO_TRANSFORM* t)
|
||||
{
|
||||
bool result = true;
|
||||
result &= al_set_shader_bool(ALLEGRO_SHADER_VAR_USE_TEX_MATRIX, 1);
|
||||
result &= al_set_shader_matrix(ALLEGRO_SHADER_VAR_TEX_MATRIX, t);
|
||||
return result;
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
import "unsafe"
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"opslag.de/schobers/geom"
|
||||
"opslag.de/schobers/geom/lin"
|
||||
)
|
||||
|
||||
func DrawFilledRectangle(x1, y1, x2, y2 float32, c Color) {
|
||||
C.al_draw_filled_rectangle(C.float(x1), C.float(y1), C.float(x2), C.float(y2), c.color)
|
||||
@ -25,6 +52,125 @@ func DrawRectangle(x1, y1, x2, y2 float32, c Color, thickness float32) {
|
||||
C.al_draw_rectangle(C.float(x1), C.float(y1), C.float(x2), C.float(y2), c.color, C.float(thickness))
|
||||
}
|
||||
|
||||
func DrawTexture(x1, y1, x2, y2, x3, y3, x4, y4 float32, b *Bitmap) {
|
||||
var vtxs [4]C.ALLEGRO_VERTEX
|
||||
var white = NewColor(255, 255, 255)
|
||||
vtxs[0].x = C.float(x1)
|
||||
vtxs[0].y = C.float(y1)
|
||||
vtxs[0].u = 0
|
||||
vtxs[0].v = 0
|
||||
vtxs[0].color = white.color
|
||||
vtxs[1].x = C.float(x2)
|
||||
vtxs[1].y = C.float(y2)
|
||||
vtxs[1].u = C.float(b.width)
|
||||
vtxs[1].v = 0
|
||||
vtxs[1].color = white.color
|
||||
vtxs[2].x = C.float(x4)
|
||||
vtxs[2].y = C.float(y4)
|
||||
vtxs[2].u = 0
|
||||
vtxs[2].v = C.float(b.height)
|
||||
vtxs[2].color = white.color
|
||||
vtxs[3].x = C.float(x3)
|
||||
vtxs[3].y = C.float(y3)
|
||||
vtxs[3].u = C.float(b.width)
|
||||
vtxs[3].v = C.float(b.height)
|
||||
vtxs[3].color = white.color
|
||||
|
||||
C.al_draw_prim(unsafe.Pointer(&vtxs), nil, b.bitmap, 0, 4, C.ALLEGRO_PRIM_TRIANGLE_STRIP)
|
||||
}
|
||||
|
||||
func DrawTextureProj(x1, y1, x2, y2, x3, y3, x4, y4 float32, b *Bitmap) {
|
||||
var w, h = float32(b.width), float32(b.height)
|
||||
var proj = lin.Projection32(
|
||||
geom.PtF32(0, 0), geom.PtF32(x1, y1),
|
||||
geom.PtF32(w, 0), geom.PtF32(x2, y2),
|
||||
geom.PtF32(w, h), geom.PtF32(x3, y3),
|
||||
geom.PtF32(0, h), geom.PtF32(x4, y4))
|
||||
|
||||
var w05, h05 = .5 * w, .5 * h
|
||||
var pt0 = lin.Project32(proj, geom.PtF32(w05, h05))
|
||||
var pt2 = lin.Project32(proj, geom.PtF32(w05, 0))
|
||||
var pt4 = lin.Project32(proj, geom.PtF32(w, h05))
|
||||
var pt6 = lin.Project32(proj, geom.PtF32(w05, h))
|
||||
var pt8 = lin.Project32(proj, geom.PtF32(0, h05))
|
||||
|
||||
var cw, ch, cw05, ch05 = C.float(w), C.float(h), C.float(w05), C.float(h05)
|
||||
var vtxs [10]C.ALLEGRO_VERTEX
|
||||
var white = NewColor(255, 255, 255)
|
||||
vtxs[0].x = C.float(pt0.X)
|
||||
vtxs[0].y = C.float(pt0.Y)
|
||||
vtxs[0].u = cw05
|
||||
vtxs[0].v = ch05
|
||||
vtxs[0].color = white.color
|
||||
vtxs[1].x = C.float(x1)
|
||||
vtxs[1].y = C.float(y1)
|
||||
vtxs[1].u = 0
|
||||
vtxs[1].v = 0
|
||||
vtxs[1].color = white.color
|
||||
vtxs[2].x = C.float(pt2.X)
|
||||
vtxs[2].y = C.float(pt2.Y)
|
||||
vtxs[2].u = cw05
|
||||
vtxs[2].v = 0
|
||||
vtxs[2].color = white.color
|
||||
vtxs[3].x = C.float(x2)
|
||||
vtxs[3].y = C.float(y2)
|
||||
vtxs[3].u = cw
|
||||
vtxs[3].v = 0
|
||||
vtxs[3].color = white.color
|
||||
vtxs[4].x = C.float(pt4.X)
|
||||
vtxs[4].y = C.float(pt4.Y)
|
||||
vtxs[4].u = cw
|
||||
vtxs[4].v = ch05
|
||||
vtxs[4].color = white.color
|
||||
vtxs[5].x = C.float(x3)
|
||||
vtxs[5].y = C.float(y3)
|
||||
vtxs[5].u = cw
|
||||
vtxs[5].v = ch
|
||||
vtxs[5].color = white.color
|
||||
vtxs[6].x = C.float(pt6.X)
|
||||
vtxs[6].y = C.float(pt6.Y)
|
||||
vtxs[6].u = cw05
|
||||
vtxs[6].v = ch
|
||||
vtxs[6].color = white.color
|
||||
vtxs[7].x = C.float(x4)
|
||||
vtxs[7].y = C.float(y4)
|
||||
vtxs[7].u = 0
|
||||
vtxs[7].v = ch
|
||||
vtxs[7].color = white.color
|
||||
vtxs[8].x = C.float(pt8.X)
|
||||
vtxs[8].y = C.float(pt8.Y)
|
||||
vtxs[8].u = 0
|
||||
vtxs[8].v = ch05
|
||||
vtxs[8].color = white.color
|
||||
vtxs[9].x = C.float(x1)
|
||||
vtxs[9].y = C.float(y1)
|
||||
vtxs[9].u = 0
|
||||
vtxs[9].v = 0
|
||||
vtxs[9].color = white.color
|
||||
|
||||
C.al_draw_prim(unsafe.Pointer(&vtxs), nil, b.bitmap, 0, 10, C.ALLEGRO_PRIM_TRIANGLE_FAN)
|
||||
|
||||
// var lineC = NewColor(0, 255, 0)
|
||||
// drawLine := func(p1, p2 geom.PointF32) {
|
||||
// DrawLine(p1.X, p1.Y, p2.X, p2.Y, lineC, 2)
|
||||
// }
|
||||
// bounds := []geom.PointF32{geom.PtF32(x1, y1), pt2, geom.PtF32(x2, y2), pt4, geom.PtF32(x3, y3), pt6, geom.PtF32(x4, y4), pt8}
|
||||
// for i, pt := range bounds {
|
||||
// drawLine(pt, bounds[(i+1)%8])
|
||||
// drawLine(pt0, pt)
|
||||
// }
|
||||
|
||||
// var pointC = NewColor(255, 0, 0)
|
||||
// drawPt := func(p geom.PointF32) {
|
||||
// DrawFilledRectangle(p.X-2, p.Y-2, p.X+2, p.Y+2, pointC)
|
||||
// }
|
||||
// drawPt(pt0)
|
||||
// drawPt(pt2)
|
||||
// drawPt(pt4)
|
||||
// drawPt(pt6)
|
||||
// drawPt(pt8)
|
||||
}
|
||||
|
||||
func DrawTriangle(x1, y1, x2, y2, x3, y3 float32, c Color, thickness float32) {
|
||||
C.al_draw_triangle(C.float(x1), C.float(y1), C.float(x2), C.float(y2), C.float(x3), C.float(y3), c.color, C.float(thickness))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user