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) } } }
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() }
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 // 减少四边形的旋转变量 }
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() ///必须交换显示区才能展现 }
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) }
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() } }
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. */ }
// 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() } }
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) }
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() }
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() }
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() }
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() } }
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) } } }
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() ///必须交换显示区才能展现 }
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() }
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() }
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() }
// 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]) } } }
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 // 减少四边形的旋转变量 }