Example #1
0
func (m *Map) Draw() {

	// gl.Enable(gl.PRIMITIVE_RESTART)
	// gl.PrimitiveRestartIndex(PRIMITIVE_RESTART)
	gl.EnableClientState(gl.VERTEX_ARRAY)
	gl.Translatef(float32(m.gridSize/2), float32(m.gridSize/2), 0)

	if m.renderSmooth {
		gl.Enable(gl.BLEND)
		gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
		gl.Enable(gl.POLYGON_SMOOTH)
		gl.Hint(gl.POLYGON_SMOOTH_HINT, gl.NICEST)
	}

	if m.renderMode == 1 {
		gl.LineWidth(1)
		gl.VertexPointer(2, gl.FLOAT, 0, m.gridLines)
		gl.Color3f(0.2, 0.2, 0.2)
		gl.DrawArrays(gl.LINES, 0, len(m.gridLines)/2)
		gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE)
	}

	for _, vl := range m.vl {
		if len(vl.vertices) > 0 {
			gl.VertexPointer(2, gl.FLOAT, 0, vl.vertices)
			gl.Color3f(vl.colors[0], vl.colors[1], vl.colors[2])
			gl.DrawElements(gl.TRIANGLES, len(vl.indices), gl.UNSIGNED_INT, vl.indices)
		}
	}

}
Example #2
0
func drawScene() {
	gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)

	gl.LoadIdentity()
	gl.Translatef(-1.5, 0, -6)
	gl.Rotatef(trisAngle, 0, 1, 0)

	gl.Begin(gl.TRIANGLES)
	gl.Color3f(1, 0, 0)
	gl.Vertex3f(0, 1, 0)
	gl.Color3f(0, 1, 0)
	gl.Vertex3f(-1, -1, 0)
	gl.Color3f(0, 0, 1)
	gl.Vertex3f(1, -1, 0)
	gl.End()

	gl.LoadIdentity()
	gl.Translatef(1.5, 0, -6)
	gl.Rotatef(quadAngle, 1, 0, 0)
	gl.Color3f(0.5, 0.5, 1.0)

	gl.Begin(gl.QUADS)
	gl.Vertex3f(-1, 1, 0)
	gl.Vertex3f(1, 1, 0)
	gl.Vertex3f(1, -1, 0)
	gl.Vertex3f(-1, -1, 0)
	gl.End()

	trisAngle += 0.2
	quadAngle -= 0.15

	glfw.SwapBuffers()
}
Example #3
0
File: 04.go Project: nzlov/gogl
func draw() {                  // 从这里开始进行所有的绘制

	gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) // 清除屏幕和深度缓存
	gl.LoadIdentity()                                   // 重置当前的模型观察矩阵
	gl.Translatef(-1.5, 0.0, -6.0)                      // 左移 1.5 单位,并移入屏幕 6.0

	gl.Rotatef(rtri, 0.0, 1.0, 0.0) // 绕Y轴旋转三角形
	gl.Begin(gl.TRIANGLES)          // 绘制三角形
	gl.Color3f(1.0, 0.0, 0.0)       // 设置当前色为红色
	gl.Vertex3f(0.0, 1.0, 0.0)      // 上顶点
	gl.Color3f(0.0, 1.0, 0.0)       // 设置当前色为绿色
	gl.Vertex3f(-1.0, -1.0, 0.0)    // 左下
	gl.Color3f(0.0, 0.0, 1.0)       // 设置当前色为蓝色
	gl.Vertex3f(1.0, -1.0, 0.0)     // 右下
	gl.End()                        // 三角形绘制结束

	gl.LoadIdentity()                // 重置当前的模型观察矩阵
	gl.Translatef(1.5, 0.0, -6.0)    // 右移1.5单位,并移入屏幕 6.0
	gl.Rotatef(rquad, 1.0, 0.0, 0.0) //  绕X轴旋转四边形
	gl.Color3f(0.5, 0.5, 1.0)        // 一次性将当前色设置为蓝色
	gl.Begin(gl.QUADS)               //  绘制正方形
	gl.Vertex3f(-1.0, 1.0, 0.0)      // 左上
	gl.Vertex3f(1.0, 1.0, 0.0)       // 右上
	gl.Vertex3f(1.0, -1.0, 0.0)      // 左下
	gl.Vertex3f(-1.0, -1.0, 0.0)     // 右下
	gl.End()

	rtri += 0.2 // 增加三角形的旋转变量

	rquad -= 0.15 // 减少四边形的旋转变量
}
Example #4
0
func drawScene() {
	gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) /// 清除屏幕及深度缓存
	gl.LoadIdentity()                                   /// 重置模型观察矩阵

	gl.Translatef(-1.5, 0, -6) /// 左移 1.5 单位,并移入屏幕 6.0

	gl.Begin(gl.TRIANGLES) /// 绘制三角形
	gl.Color3f(1, 0, 0)    ///  设置当前色为红色
	gl.Vertex3f(0, 1, 0)   ///上顶点
	gl.Color3f(0, 1, 0)    /// 设置当前色为绿色
	gl.Vertex3f(-1, -1, 0) /// 左下
	gl.Color3f(0, 0, 1)    ///设置当前色为蓝色
	gl.Vertex3f(1, -1, 0)  ///右下
	gl.End()               ///三角形绘制结束,三角形将被填充。
	//但是因为每个顶点有不同的颜色,因此看起来颜色从每个角喷出,并刚好在三角形的中心汇合,三种颜色相互混合。这就是平滑着色。

	gl.Translatef(3, 0, 0)    ///右移3单位
	gl.Color3f(0.5, 0.5, 1.0) ///一次性将当前色设置为蓝色

	/// @note 顺时针绘制的正方形意味着我们所看见的是四边形的背面
	gl.Begin(gl.QUADS)     ///绘制正方形
	gl.Vertex3f(-1, 1, 0)  /// 左上
	gl.Vertex3f(1, 1, 0)   /// 右上
	gl.Vertex3f(1, -1, 0)  /// 右下
	gl.Vertex3f(-1, -1, 0) /// 左下
	gl.End()               ///正方形绘制结束

	glfw.SwapBuffers() ///必须交换显示区才能展现
}
Example #5
0
func (card *PlayCard) Draw() {
	if card.Owner == PlayerID {
		gl.Color3f(0.5, 0.8, 0.3)
	} else if card.Owner == OpponentID {
		gl.Color3f(0.8, 0.5, 0.3)
	} else {
		gl.Color3f(0.8, 0.8, 0.8)
	}
	glh.DrawQuadi(0, 0, CardWidth, CardHeight)
	drawArrows(card.Card.Arrows)
}
Example #6
0
func main() {
	var err error
	if err = glfw.Init(); err != nil {
		log.Fatalf("%v\n", err)
		return
	}

	defer glfw.Terminate()

	// Open window with FSAA samples (if possible).
	glfw.OpenWindowHint(glfw.FsaaSamples, 4)

	if err = glfw.OpenWindow(400, 400, 0, 0, 0, 0, 0, 0, glfw.Windowed); err != nil {
		log.Fatalf("%v\n", err)
		return
	}

	defer glfw.CloseWindow()

	glfw.SetWindowTitle("Aliasing Detector")
	glfw.SetSwapInterval(1)

	if samples := glfw.WindowParam(glfw.FsaaSamples); samples != 0 {
		fmt.Printf("Context reports FSAA is supported with %d samples\n", samples)
	} else {
		fmt.Printf("Context reports FSAA is unsupported\n")
	}

	gl.MatrixMode(gl.PROJECTION)
	glu.Perspective(0, 1, 0, 1)

	for glfw.WindowParam(glfw.Opened) == 1 {
		time := float32(glfw.Time())

		gl.Clear(gl.COLOR_BUFFER_BIT)

		gl.LoadIdentity()
		gl.Translatef(0.5, 0, 0)
		gl.Rotatef(time, 0, 0, 1)

		gl.Enable(GL_MULTISAMPLE_ARB)
		gl.Color3f(1, 1, 1)
		gl.Rectf(-0.25, -0.25, 0.25, 0.25)

		gl.LoadIdentity()
		gl.Translatef(-0.5, 0, 0)
		gl.Rotatef(time, 0, 0, 1)

		gl.Disable(GL_MULTISAMPLE_ARB)
		gl.Color3f(1, 1, 1)
		gl.Rectf(-0.25, -0.25, 0.25, 0.25)
		glfw.SwapBuffers()
	}
}
Example #7
0
func display() {
	gl.Clear(gl.COLOR_BUFFER_BIT)
	gl.Begin(gl.TRIANGLES)
	gl.Color3f(0.0, 0.0, 1.0) /* blue */
	gl.Vertex2i(0, 0)
	gl.Color3f(0.0, 1.0, 0.0) /* green */
	gl.Vertex2i(200, 200)
	gl.Color3f(1.0, 0.0, 0.0) /* red */
	gl.Vertex2i(20, 200)
	gl.End()
	gl.Flush() /* Single buffered, so needs a flush. */
}
Example #8
0
// OpenGL draw function
func draw() {
	gl.Clear(gl.COLOR_BUFFER_BIT)
	gl.Enable(gl.BLEND)
	gl.Enable(gl.POINT_SMOOTH)
	gl.Enable(gl.LINE_SMOOTH)
	gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
	gl.LoadIdentity()

	gl.Begin(gl.LINES)
	gl.Color3f(.2, .2, .2)
	for i := range staticLines {
		x := staticLines[i].GetAsSegment().A.X
		y := staticLines[i].GetAsSegment().A.Y
		gl.Vertex3f(float32(x), float32(y), 0)
		x = staticLines[i].GetAsSegment().B.X
		y = staticLines[i].GetAsSegment().B.Y
		gl.Vertex3f(float32(x), float32(y), 0)
	}
	gl.End()

	gl.Color4f(.3, .3, 1, .8)
	// draw balls
	for _, ball := range balls {
		gl.PushMatrix()
		pos := ball.Body.Position()
		rot := ball.Body.Angle() * chipmunk.DegreeConst
		gl.Translatef(float32(pos.X), float32(pos.Y), 0.0)
		gl.Rotatef(float32(rot), 0, 0, 1)
		drawCircle(float64(ballRadius), 60)
		gl.PopMatrix()
	}
}
Example #9
0
func renderSwitch(s *Switch) {
	gl.LoadIdentity()
	// TODO constant
	v := SwitchSize / 2
	x, y := float32(s.X+v), float32(s.Y+v)
	gl.Translatef(x, y, 0)
	// Render the switch
	gl.Color3f(1, 1, 1)
	gl.Begin(gl.TRIANGLE_FAN)
	gl.Vertex2d(0, 0)
	vv := float64(v)
	for i := float64(0); i <= SwitchSegments; i++ {
		a := 2 * math.Pi * i / SwitchSegments
		gl.Vertex2d(math.Sin(a)*vv, math.Cos(a)*vv)
	}
	gl.End()

	if LineWidth != 0 {
		// Render the shape
		gl.Color3i(0, 0, 0)
		gl.LineWidth(LineWidth)
		gl.Begin(gl.LINE_LOOP)
		for i := float64(0); i <= SwitchSegments; i++ {
			a := 2 * math.Pi * i / SwitchSegments
			gl.Vertex2d(math.Sin(a)*vv, math.Cos(a)*vv)
		}
		gl.End()
	}

	// Write the switch name
	gl.LoadIdentity()
	w, h := fonts[6].Metrics(s.name)
	gl.Color3i(0, 0, 0)
	fonts[6].Printf(x-float32(w)/2, y-float32(h)/2+2, s.name)
}
Example #10
0
func drawPaddle(x float32, y float32) {
	gl.PushMatrix()
	gl.Translatef(float32(x), float32(y), 0)
	gl.Color3f(1.0, 1.0, 1.0)
	gl.Begin(gl.LINE_STRIP)
	gl.Vertex2f(0, -5)
	gl.Vertex2f(0, 5)
	gl.End()
	gl.PopMatrix()
}
Example #11
0
func main() {
	glut.InitDisplayMode(glut.SINGLE | glut.RGB)
	glut.InitWindowSize(465, 250)
	glut.CreateWindow("GLUT bitmap & stroke font example")
	gl.ClearColor(1.0, 1.0, 1.0, 1.0)
	gl.Color3f(0, 0, 0)
	gl.LineWidth(3.0)
	glut.DisplayFunc(display)
	glut.ReshapeFunc(reshape)
	glut.MainLoop()
}
Example #12
0
func display() {
	gl.Clear(gl.COLOR_BUFFER_BIT)

	gl.Begin(gl.TRIANGLES)
	l := t.units
	for e := l.Front(); e != nil; e = e.Next() {
		b := e.Value.(*Entity)
		//r := b.rot_matrix
		p := b.pos
		gl.Color3f(0.0, 0.0, 1.0) /* blue */
		gl.Vertex2f(p[0], p[1])
		gl.Color3f(0.0, 1.0, 0.0) /* green */
		gl.Vertex2f(20+p[0], 20+p[1])
		gl.Color3f(1.0, 0.0, 0.0) /* red */
		gl.Vertex2f(p[0], 20+p[1])
	}
	gl.End()
	gl.Flush() /* Single buffered, so needs a flush. */

	glut.SwapBuffers()
}
Example #13
0
func drawHex(x, y, kind int, alpha float32) {
	if kind == 6 {
		gl.TexEnvf(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.REPLACE)
		starTex.Bind(gl.TEXTURE_2D)
		gl.Begin(gl.QUADS)
		gl.TexCoord2f(0, 0)
		gl.Vertex2i(x, y)
		gl.TexCoord2f(0, 1)
		gl.Vertex2i(x, y+HEX_HEIGHT)
		gl.TexCoord2f(1, 1)
		gl.Vertex2i(x+HEX_WIDTH, y+HEX_HEIGHT)
		gl.TexCoord2f(1, 0)
		gl.Vertex2i(x+HEX_WIDTH, y)
		gl.End()
	} else {
		gl.TexEnvf(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE)
		gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
		var r, g, b float32
		switch kind {
		case 0:
			r = 1
		case 1:
			g = 1
		case 2:
			b = 1
		case 3:
			r = 1
			g = 1
		case 4:
			r = 1
			b = 1
		case 5:
			g = 1 - 222/255
			b = 1
		}
		hexTex.Bind(gl.TEXTURE_2D)
		gl.Begin(gl.QUADS)
		if alpha < 1 {
			gl.Color4f(r, g, b, alpha)
		} else {
			gl.Color3f(r, g, b)
		}
		gl.TexCoord2f(0, 0)
		gl.Vertex2i(x, y)
		gl.TexCoord2f(0, 1)
		gl.Vertex2i(x, y+HEX_HEIGHT)
		gl.TexCoord2f(1, 1)
		gl.Vertex2i(x+HEX_WIDTH, y+HEX_HEIGHT)
		gl.TexCoord2f(1, 0)
		gl.Vertex2i(x+HEX_WIDTH, y)
		gl.End()
	}
}
Example #14
0
func drawArrows(arrows [8]bool) {
	for i := Direction(0); i < 8; i++ {
		// determine arrow position on card
		x := 0.5 * (1 + arrowCos(i)) * CardWidth
		y := 0.5 * (1 + arrowSin(i)) * CardHeight

		if arrows[i] {
			// draw the arrow
			gl.Color3f(1.0, 1.0, 0)
			glh.DrawQuadd(x-2, y-2, 4, 4)
		}
	}
}
Example #15
0
func drawScene() {
	gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) /// 清除屏幕及深度缓存

	gl.LoadIdentity()              /// 重置模型观察矩阵
	gl.Translatef(-1.5, 0, -6)     /// 左移 1.5 单位,并移入屏幕 6.0
	gl.Rotatef(trisAngle, 0, 1, 0) ///以y为轴 参数:角度,X,Y,Z

	gl.Begin(gl.TRIANGLES) /// 绘制三角形
	gl.Color3f(1, 0, 0)    ///  设置当前色为红色
	gl.Vertex3f(0, 1, 0)   ///上顶点
	gl.Color3f(0, 1, 0)    /// 设置当前色为绿色
	gl.Vertex3f(-1, -1, 0) /// 左下
	gl.Color3f(0, 0, 1)    ///设置当前色为蓝色
	gl.Vertex3f(1, -1, 0)  ///右下
	gl.End()               ///三角形绘制结束,三角形将被填充。
	//但是因为每个顶点有不同的颜色,因此看起来颜色从每个角喷出,并刚好在三角形的中心汇合,三种颜色相互混合。这就是平滑着色。

	/// 要让对象绕自身的轴旋转,必须让对象的中心坐标总是(0.0f,0,0f,0,0f),因此这里的四边形是满屏跑的
	gl.LoadIdentity() ///将当前点移到了屏幕中心,X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。
	///OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是负值,移出屏幕则是正值。
	gl.Rotatef(quadAngle, 1, 0, 0) /// 以x为轴
	gl.Translatef(1.5, 0, -6)      ///以当前点为起始点移动?(是的)-6为距离
	//gl.Translatef(3, 0, -6); ///右移3单位,看不见?(因为loadIdentity()置中了)
	gl.Color3f(0.5, 0.5, 1.0) ///一次性将当前色设置为蓝色

	/// @note 顺时针绘制的正方形意味着我们所看见的是四边形的背面
	gl.Begin(gl.QUADS)     ///绘制正方形
	gl.Vertex3f(-1, 1, 0)  /// 左上
	gl.Vertex3f(1, 1, 0)   /// 右上
	gl.Vertex3f(1, -1, 0)  /// 右下
	gl.Vertex3f(-1, -1, 0) /// 左下
	gl.End()               ///正方形绘制结束

	trisAngle += 0.2
	quadAngle -= 0.15

	glfw.SwapBuffers() ///必须交换显示区才能展现
}
Example #16
0
func (v *video) draw(pixels []byte) {

	// No need to clear the screen since I explicitly redraw all pixels, at
	// least currently.

	gl.MatrixMode(gl.POLYGON)

	for yline := 0; yline < screenHeight; yline++ {

		for xline := 0; xline < screenWidth; xline++ {

			x, y := float32(xline), float32(yline)
			if pixels[xline+yline*64] == 0 {
				gl.Color3f(0, 0, 0)
			} else {
				gl.Color3f(1, 1, 1)
			}
			gl.Rectf(x, y, x+1, y+1)
		}
	}

	glfw.SwapBuffers()
}
Example #17
0
File: 03.go Project: nzlov/gogl
func draw() { // 从这里开始进行所有的绘制

	gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) // 清除屏幕和深度缓存
	gl.LoadIdentity()                                   // 重置当前的模型观察矩阵
	gl.Translatef(-1.5, 0.0, -6.0)                      // 左移 1.5 单位,并移入屏幕 6.0

	gl.Begin(gl.TRIANGLES)       // 绘制三角形
	gl.Color3f(1.0, 0.0, 0.0)    // 设置当前色为红色
	gl.Vertex3f(0.0, 1.0, 0.0)   // 上顶点
	gl.Color3f(0.0, 1.0, 0.0)    // 设置当前色为绿色
	gl.Vertex3f(-1.0, -1.0, 0.0) // 左下
	gl.Color3f(0.0, 0.0, 1.0)    // 设置当前色为蓝色
	gl.Vertex3f(1.0, -1.0, 0.0)  // 右下
	gl.End()                     // 三角形绘制结束

	gl.Translatef(3.0, 0.0, 0.0) // 右移3单位
	gl.Color3f(0.5, 0.5, 1.0)    // 一次性将当前色设置为蓝色
	gl.Begin(gl.QUADS)           //  绘制正方形
	gl.Vertex3f(-1.0, 1.0, 0.0)  // 左上
	gl.Vertex3f(1.0, 1.0, 0.0)   // 右上
	gl.Vertex3f(1.0, -1.0, 0.0)  // 左下
	gl.Vertex3f(-1.0, -1.0, 0.0) // 右下
	gl.End()
}
Example #18
0
func drawBall(angle float32, ball_x float32, ball_y float32) {
	gl.PushMatrix()
	gl.Color3f(1, 1, 1)
	gl.Translatef(ball_x, ball_y, 0.0)
	gl.Begin(gl.LINE_LOOP)
	for rad := 0.0; rad < 1.0; rad += 0.01 {
		gl.Vertex2f(
			float32(2.0*math.Cos(2.0*math.Pi*rad)),
			float32(2.0*math.Sin(2.0*math.Pi*rad)+0.2))
	}
	gl.End()
	gl.Rotatef(angle, 0.0, 0.0, 1.0)

	gl.Begin(gl.LINE_STRIP)
	gl.Vertex2f(0, 0)
	gl.Vertex2f(2, 0)
	gl.End()

	gl.PopMatrix()
}
Example #19
0
// Used in classic render mode.
// Defines vertex colors.
func (a *Attr) color(i int) {
	i *= a.size

	switch a.size {
	case 3:
		switch v := a.data.(type) {
		case []int8:
			gl.Color3b(v[i], v[i+1], v[i+2])
		case []uint8:
			gl.Color3ub(v[i], v[i+1], v[i+2])
		case []int16:
			gl.Color3s(v[i], v[i+1], v[i+2])
		case []int32:
			gl.Color3i(int(v[i]), int(v[i+1]), int(v[i+2]))
		case []float32:
			gl.Color3f(v[i], v[i+1], v[i+2])
		case []float64:
			gl.Color3d(v[i], v[i+1], v[i+2])
		}
	case 4:
		switch v := a.data.(type) {
		case []int8:
			gl.Color4b(v[i], v[i+1], v[i+2], v[i+3])
		case []uint8:
			gl.Color4ub(v[i], v[i+1], v[i+2], v[i+3])
		case []int16:
			gl.Color4s(v[i], v[i+1], v[i+2], v[i+3])
		case []int32:
			gl.Color4i(int(v[i]), int(v[i+1]), int(v[i+2]), int(v[i+3]))
		case []float32:
			gl.Color4f(v[i], v[i+1], v[i+2], v[i+3])
		case []float64:
			gl.Color4d(v[i], v[i+1], v[i+2], v[i+3])
		}
	}
}
Example #20
0
File: 05.go Project: nzlov/gogl
func draw() {                  // 从这里开始进行所有的绘制

	gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) // 清除屏幕和深度缓存
	gl.LoadIdentity()                                   // 重置当前的模型观察矩阵
	gl.Translatef(-1.5, 0.0, -6.0)                      // 左移 1.5 单位,并移入屏幕 6.0

	gl.Rotatef(rtri, 0.0, 1.0, 0.0) // 绕Y轴旋转三角形

	gl.Begin(gl.TRIANGLES)       // 绘制三角形
	gl.Color3f(1.0, 0.0, 0.0)    // 设置当前色为红色
	gl.Vertex3f(0.0, 1.0, 0.0)   // 三角形的上顶点 (前侧面)
	gl.Color3f(0.0, 1.0, 0.0)    // 设置当前色为绿色
	gl.Vertex3f(-1.0, -1.0, 1.0) // 三角形的左下顶点 (前侧面)
	gl.Color3f(0.0, 0.0, 1.0)    // 设置当前色为蓝色
	gl.Vertex3f(1.0, -1.0, 1.0)  // 三角形的右下顶点 (前侧面)

	gl.Color3f(1.0, 0.0, 0.0)    // 设置当前色为红色
	gl.Vertex3f(0.0, 1.0, 0.0)   // 三角形的上顶点 (右侧面)
	gl.Color3f(0.0, 0.0, 1.0)    // 设置当前色为蓝色
	gl.Vertex3f(1.0, -1.0, 1.0)  // 三角形的左下顶点 (右侧面)
	gl.Color3f(0.0, 1.0, 0.0)    // 设置当前色为绿色
	gl.Vertex3f(1.0, -1.0, -1.0) // 三角形的右下顶点 (右侧面)

	gl.Color3f(1.0, 0.0, 0.0)     // 设置当前色为红色
	gl.Vertex3f(0.0, 1.0, 0.0)    // 三角形的上顶点 (后侧面)
	gl.Color3f(0.0, 0.0, 1.0)     // 设置当前色为蓝色
	gl.Vertex3f(1.0, -1.0, -1.0)  // 三角形的左下顶点 (后侧面)
	gl.Color3f(0.0, 1.0, 0.0)     // 设置当前色为绿色
	gl.Vertex3f(-1.0, -1.0, -1.0) // 三角形的右下顶点 (后侧面)

	gl.Color3f(1.0, 0.0, 0.0)     // 设置当前色为红色
	gl.Vertex3f(0.0, 1.0, 0.0)    // 三角形的上顶点 (左侧面)
	gl.Color3f(0.0, 0.0, 1.0)     // 设置当前色为蓝色
	gl.Vertex3f(-1.0, -1.0, -1.0) // 三角形的左下顶点 (左侧面)
	gl.Color3f(0.0, 1.0, 0.0)     // 设置当前色为绿色
	gl.Vertex3f(-1.0, -1.0, 1.0)  // 三角形的右下顶点 (左侧面)

	gl.End()                      // 三角形侧面绘制结束
	gl.Begin(gl.QUADS)            // 三角形底面绘制形
	gl.Vertex3f(1.0, -1.0, -1.0)  // 四边形的右上顶点 (底面)
	gl.Vertex3f(-1.0, -1.0, -1.0) // 四边形的左上顶点 (底面)
	gl.Vertex3f(-1.0, -1.0, 1.0)  // 四边形的左下顶点 (底面)
	gl.Vertex3f(1.0, -1.0, 1.0)   // 四边形的右下顶点 (底面)
	gl.End()                      // 三角形底面绘制结束

	gl.LoadIdentity()                // 重置当前的模型观察矩阵
	gl.Translatef(1.5, 0.0, -7.0)    // 右移1.5单位,并移入屏幕 6.0
	gl.Rotatef(rquad, 1.0, 1.0, 1.0) //  绕X轴旋转四边形
	gl.Begin(gl.QUADS)               //  绘制正方形

	gl.Color3f(1.0, 0.0, 0.0)    // 一次性将当前色设置为红色
	gl.Vertex3f(1.0, 1.0, -1.0)  // 四边形的右上顶点 (顶面)
	gl.Vertex3f(-1.0, 1.0, -1.0) // 四边形的左上顶点 (顶面)
	gl.Vertex3f(-1.0, 1.0, 1.0)  // 四边形的左下顶点 (顶面)
	gl.Vertex3f(1.0, 1.0, 1.0)   // 四边形的右下顶点 (顶面)

	gl.Color3f(1.0, 0.5, 0.0)    // 一次性将当前色设置为橙色
	gl.Vertex3f(1.0, 1.0, 1.0)   // 四边形的右上顶点 (前面)
	gl.Vertex3f(-1.0, 1.0, 1.0)  // 四边形的左上顶点 (前面)
	gl.Vertex3f(-1.0, -1.0, 1.0) // 四边形的左下顶点 (前面)
	gl.Vertex3f(1.0, -1.0, 1.0)  // 四边形的右下顶点 (前面)

	gl.Color3f(0.0, 0.0, 1.0)    // 一次性将当前色设置为绿色
	gl.Vertex3f(1.0, 1.0, -1.0)  // 四边形的右上顶点 (右面)
	gl.Vertex3f(1.0, 1.0, 1.0)   // 四边形的左上顶点 (右面)
	gl.Vertex3f(1.0, -1.0, 1.0)  // 四边形的左下顶点 (右面)
	gl.Vertex3f(1.0, -1.0, -1.0) // 四边形的右下顶点 (右面)

	gl.Color3f(0.0, 1.0, 0.0)     // 一次性将当前色设置为蓝色
	gl.Vertex3f(-1.0, 1.0, -1.0)  // 四边形的右上顶点 (后面)
	gl.Vertex3f(1.0, 1.0, -1.0)   // 四边形的左上顶点 (后面)
	gl.Vertex3f(1.0, -1.0, -1.0)  // 四边形的左下顶点 (后面)
	gl.Vertex3f(-1.0, -1.0, -1.0) // 四边形的右下顶点 (后面)

	gl.Color3f(1.0, 1.0, 0.0)     // 一次性将当前色设置为黄色
	gl.Vertex3f(-1.0, 1.0, 1.0)   // 四边形的右上顶点 (左面)
	gl.Vertex3f(-1.0, 1.0, -1.0)  // 四边形的左上顶点 (左面)
	gl.Vertex3f(-1.0, -1.0, -1.0) // 四边形的左下顶点 (左面)
	gl.Vertex3f(-1.0, -1.0, 1.0)  // 四边形的右下顶点 (左面)

	gl.Color3f(1.0, 1.0, 1.0)     // 一次性将当前色设置为白色
	gl.Vertex3f(1.0, -1.0, -1.0)  // 四边形的右上顶点 (底面)
	gl.Vertex3f(-1.0, -1.0, -1.0) // 四边形的左上顶点 (底面)
	gl.Vertex3f(-1.0, -1.0, 1.0)  // 四边形的左下顶点 (底面)
	gl.Vertex3f(1.0, -1.0, 1.0)   // 四边形的右下顶点 (底面)
	gl.End()

	rtri += 0.2 // 增加三角形的旋转变量

	rquad -= 0.15 // 减少四边形的旋转变量
}