-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathedge.go
75 lines (57 loc) · 1.81 KB
/
edge.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import ( "math" )
type Edge struct {
x, xStep float32
yStart, yEnd int
//col, colStep Vec4
texCoordX, texCoordXStep float32
texCoordY, texCoordYStep float32
// perspective
oneOverZ, oneOverZStep float32
// depth buffer
depth, depthStep float32
}
func NewEdge( grad Gradients, minY, maxY Vertex, minYIndex int ) Edge {
ne := Edge{}
ne.yStart = int(math.Ceil( float64(minY.Pos.Y) ))
ne.yEnd = int(math.Ceil( float64(maxY.Pos.Y) ))
yDist := maxY.Pos.Y - minY.Pos.Y
xDist := maxY.Pos.X - minY.Pos.X
ne.xStep = float32(xDist) / float32(yDist)
yPreStep := float32(ne.yStart) - minY.Pos.Y
ne.x = minY.Pos.X + yPreStep * ne.xStep
xPreStep := ne.x - minY.Pos.X
ne.texCoordX = grad.texCoordX[minYIndex] +
grad.texCoordXXStep * xPreStep +
grad.texCoordXYStep * yPreStep
ne.texCoordXStep = grad.texCoordXYStep + grad.texCoordXXStep * ne.xStep
ne.texCoordY = grad.texCoordY[minYIndex] +
grad.texCoordYXStep * xPreStep +
grad.texCoordYYStep * yPreStep
ne.texCoordYStep = grad.texCoordYYStep + grad.texCoordYXStep * ne.xStep
// perspective
ne.oneOverZ = grad.oneOverZ[minYIndex] +
grad.oneOverZXStep * xPreStep +
grad.oneOverZYStep * yPreStep
ne.oneOverZStep = grad.oneOverZYStep + grad.oneOverZXStep * ne.xStep
// depth buffer
ne.depth = grad.depth[minYIndex] +
grad.depthXStep * xPreStep +
grad.depthYStep * yPreStep
ne.depthStep = grad.depthYStep + grad.depthXStep * ne.xStep
//ne.col = grad.col[minYIndex].Add(
//grad.colYStep.Mul( yPreStep ) ).Add(
//grad.colXStep.Mul( xPreStep ) )
//ne.colStep = grad.colYStep.Add( grad.colXStep.Mul( ne.xStep ) )
return ne
}
func (e *Edge) Step() {
e.x += e.xStep
e.texCoordX += e.texCoordXStep
e.texCoordY += e.texCoordYStep
// perspective
e.oneOverZ += e.oneOverZStep
// depth
e.depth += e.depthStep
//e.col = e.col.Add( e.colStep )
}