本文整理汇总了Golang中github.com/go-gl/mathgl/mgl32.Vec2类的典型用法代码示例。如果您正苦于以下问题:Golang Vec2类的具体用法?Golang Vec2怎么用?Golang Vec2使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Vec2类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: tween
func tween(a, b mgl32.Vec2) (x, y float32) {
v := b.Sub(a)
v = v.Mul(0.5)
v = a.Add(v)
return v.Elem()
}
示例2: mouseClick
func (c *Container) mouseClick(button int, release bool, position mgl32.Vec2) {
offsetPos := position.Sub(c.offset)
c.Hitbox.MouseClick(button, release, offsetPos.Sub(c.backgroundOffset))
for _, child := range c.children {
child.mouseClick(button, release, offsetPos.Sub(c.elementsOffset))
}
}
示例3: makeDot
func makeDot(v mgl32.Vec2, a float32, i int, clr mgl32.Vec4) mesh.Mesh {
m := mesh.Mesh{
Nmbr: mesh.Number(i),
Dpth: 0.5,
Vrts: []mgl32.Vec2{
{-dotx, 0}, // 0
{0, -doty}, // 1
{dotx, 0}, // 2
{0, doty}, // 3
},
Clrs: []mgl32.Vec4{
clr,
},
Trngls: []mesh.Triangle{
{
Vnd: mesh.Nd{0, 1, 2},
Flvr: mesh.CONVEX,
},
{
Vnd: mesh.Nd{2, 3, 0},
Flvr: mesh.CONVEX,
},
},
}
m.Transform(mgl32.HomogRotate2D(a)) // rotate by a
m.Transform(mgl32.Translate2D(v.Elem())) // translate by v
return m
}
示例4: renderBevelEdge
/** Calculate line boundary points.
*
* Sketch:
*
* uh1___uh2
* .' '.
* .' q '.
* .' ' ' '.
*.' ' .'. ' '.
* ' .' ul'. '
* p .' '. r
*
*
* ul can be found as above, uh1 and uh2 are much simpler:
*
* uh1 = q + ns * w/2, uh2 = q + nt * w/2
*/
func (polyline *polyLine) renderBevelEdge(sleeve, current, next mgl32.Vec2) {
t := next.Sub(current)
len_t := t.Len()
det := determinant(sleeve, t)
if mgl32.Abs(det)/(sleeve.Len()*len_t) < LINES_PARALLEL_EPS && sleeve.Dot(t) > 0 {
// lines parallel, compute as u1 = q + ns * w/2, u2 = q - ns * w/2
n := getNormal(t, polyline.halfwidth/len_t)
polyline.normals = append(polyline.normals, n)
polyline.normals = append(polyline.normals, n.Mul(-1))
polyline.generateEdges(current, 2)
return // early out
}
// cramers rule
sleeve_normal := getNormal(sleeve, polyline.halfwidth/sleeve.Len())
nt := getNormal(t, polyline.halfwidth/len_t)
lambda := determinant(nt.Sub(sleeve_normal), t) / det
d := sleeve_normal.Add(sleeve.Mul(lambda))
if det > 0 { // 'left' turn -> intersection on the top
polyline.normals = append(polyline.normals, d)
polyline.normals = append(polyline.normals, sleeve_normal.Mul(-1))
polyline.normals = append(polyline.normals, d)
polyline.normals = append(polyline.normals, nt.Mul(-1))
} else {
polyline.normals = append(polyline.normals, sleeve_normal)
polyline.normals = append(polyline.normals, d.Mul(-1))
polyline.normals = append(polyline.normals, nt)
polyline.normals = append(polyline.normals, d.Mul(-1))
}
polyline.generateEdges(current, 4)
}
示例5: moveAlongPath
func (ai *AI) moveAlongPath(targetPosition mgl32.Vec2, path []graph.Node) {
minDistance2 := square(float32(ai.Me.Size) + costMapReduction*1.3)
var pathNode *mapNode
var pathVecs []mgl32.Vec2
for _, rawNode := range path {
node := rawNode.(*mapNode)
pos := mgl32.Vec2{float32(node.X) * costMapReduction, float32(node.Y) * costMapReduction}
if pathNode == nil && dist2(ai.Me.Position, pos) >= minDistance2 {
pathNode = node
}
pathVecs = append(pathVecs, pos)
}
if pathNode == nil {
ai.addStatusMessage("Failed to find path node that was far enough away. Moving directly to objective.")
ai.Path = []mgl32.Vec2{ai.Me.Position, targetPosition}
ai.g.SetTargetPos(targetPosition.X(), targetPosition.Y())
return
}
ai.Path = pathVecs
ai.g.SetTargetPos(float32(pathNode.X*costMapReduction), float32(pathNode.Y*costMapReduction))
}
示例6: mouseMove
func (c *Container) mouseMove(position mgl32.Vec2) {
offsetPos := position.Sub(c.offset)
c.Hitbox.MouseMove(offsetPos.Sub(c.backgroundOffset))
for _, child := range c.children {
child.mouseMove(offsetPos.Sub(c.elementsOffset))
}
}
示例7: render
func (polyline *polyLine) render(coords []float32) {
var sleeve, current, next mgl32.Vec2
polyline.vertices = []mgl32.Vec2{}
polyline.normals = []mgl32.Vec2{}
coords_count := len(coords)
is_looping := (coords[0] == coords[coords_count-2]) && (coords[1] == coords[coords_count-1])
if !is_looping { // virtual starting point at second point mirrored on first point
sleeve = mgl32.Vec2{coords[2] - coords[0], coords[3] - coords[1]}
} else { // virtual starting point at last vertex
sleeve = mgl32.Vec2{coords[0] - coords[coords_count-4], coords[1] - coords[coords_count-3]}
}
for i := 0; i+3 < coords_count; i += 2 {
current = mgl32.Vec2{coords[i], coords[i+1]}
next = mgl32.Vec2{coords[i+2], coords[i+3]}
polyline.renderEdge(sleeve, current, next)
sleeve = next.Sub(current)
}
if is_looping {
polyline.renderEdge(sleeve, next, mgl32.Vec2{coords[2], coords[3]})
} else {
polyline.renderEdge(sleeve, next, next.Add(sleeve))
}
if polyline.join == LINE_JOIN_NONE {
polyline.vertices = polyline.vertices[2 : len(polyline.vertices)-2]
}
polyline.draw(is_looping)
}
示例8: project
func (c *Camera) project(pt mgl32.Vec2) mgl32.Vec2 {
var (
screen = pt.Vec4(1, 1)
out mgl32.Vec4
)
out = c.Projection.Mul4x1(screen)
return out.Vec2()
}
示例9: unproject
func (c *Camera) unproject(pt mgl32.Vec2) mgl32.Vec2 {
var (
screen = pt.Vec4(1, 1)
out mgl32.Vec4
)
out = c.Inverse.Mul4x1(screen)
out = out.Mul(1.0 / out[3])
return out.Vec2()
}
示例10: normalize
func normalize(v1 mgl32.Vec2, length float32) mgl32.Vec2 {
length_current := v1.Len()
if length_current > 0 {
v1 = v1.Mul(length / length_current)
}
return v1
}
示例11: updateImage
func (te *TextElement) updateImage(size mgl32.Vec2) {
// Initialize the context.
bg := image.Transparent
c := te.getContext()
text := te.GetHiddenText()
if len(text) == 0 {
text = te.props.placeholder
r, g, b, _ := te.props.textColor.RGBA()
placeholderColor := color.RGBA{uint8(r), uint8(g), uint8(b), 80}
c.SetSrc(image.NewUniform(placeholderColor))
}
// Establish image dimensions and do word wrap
textHeight := c.PointToFixed(float64(te.props.textSize))
var width int
var height int = int(textHeight >> 6)
words := strings.Split(text, " ")
lines := []string{""}
lineNb := 0
for _, word := range words {
wordWithSpace := fmt.Sprintf("%v ", word)
dimensions, _ := c.StringDimensions(wordWithSpace)
width += int(dimensions.X >> 6)
if width > int(size.X()) {
width = int(dimensions.X >> 6)
height += int(dimensions.Y>>6) + 1
lines = append(lines, "")
lineNb += 1
}
lines[lineNb] = fmt.Sprintf("%v%v", lines[lineNb], wordWithSpace)
}
if te.props.height > 0 {
height = int(te.props.height)
}
rgba := image.NewRGBA(image.Rect(0, 0, int(size.X()), height+int(textHeight>>6)/3))
draw.Draw(rgba, rgba.Bounds(), bg, image.ZP, draw.Src)
c.SetClip(rgba.Bounds())
c.SetDst(rgba)
// Draw the text.
pt := freetype.Pt(0, int(textHeight>>6))
for _, line := range lines {
_, err := c.DrawString(line, pt)
if err != nil {
log.Printf("Error drawing string: %v\n", err)
return
}
pt.Y += textHeight
}
te.img.SetImage(imaging.FlipV(rgba))
te.img.SetWidth(float32(rgba.Bounds().Size().X))
te.img.SetHeight(float32(rgba.Bounds().Size().Y))
}
示例12: ScreenToWorldCoords
func (c *Camera) ScreenToWorldCoords(screenCoords mgl32.Vec2) mgl32.Vec2 {
// http://stackoverflow.com/questions/7692988/
var (
half = c.ScreenSize.Mul(0.5)
pt = mgl32.Vec2{
(screenCoords.X() - half.X()) / half.X(),
(half.Y() - screenCoords.Y()) / half.Y(),
}
)
return c.unproject(pt)
}
示例13: splashConfig
func (r *SplashRenderer) splashConfig(sheet *twodee.Spritesheet, pt mgl32.Vec2, name string) twodee.SpriteConfig {
frame := sheet.GetFrame(name)
return twodee.SpriteConfig{
View: twodee.ModelViewConfig{
pt.X() + frame.Width/2.0, pt.Y() + frame.Height/2.0, 0.0, // Center
0, 0, 0,
1.0, 1.0, 1.0,
},
Frame: frame.Frame,
}
}
示例14: highlightSpriteConfig
func (h *HudLayer) highlightSpriteConfig(sheet *twodee.Spritesheet, pt mgl32.Vec2, name string) twodee.SpriteConfig {
frame := sheet.GetFrame(name)
return twodee.SpriteConfig{
View: twodee.ModelViewConfig{
pt.X() + frame.Width/2.0, pt.Y() + frame.Height/6.0, 0.0, // Left aligned
0, 0, 0,
1.0, 1.0, 1.0,
},
Frame: frame.Frame,
}
}
示例15: computeMiter
func computeMiter(lineA, lineB mgl32.Vec2, halfThick float32) (miter mgl32.Vec2, length float32) {
var (
tangent mgl32.Vec2
tmp mgl32.Vec2
)
tangent = lineA.Add(lineB).Normalize()
miter = mgl32.Vec2{-tangent[1], tangent[0]}
tmp = mgl32.Vec2{-lineA[1], lineA[0]}
length = halfThick / miter.Dot(tmp)
return
}