如何在 Racket 中使用 OpenGL 绘制三角形

How to draw a triangle with OpenGL in Racket

我试图从 Racket OpenGL documentation 在简单的 GUI window 中获取这个三角形示例,但我只看到一个黑框。我缺少什么才能显示出来?

#lang racket

(require racket/gui/base
         sgl
         sgl/gl-vectors)

(define frame (new frame% [label "OpenGL"]))

(define (draw self dc)
  (send self
        with-gl-context
        (lambda ()
          (gl-begin 'triangles)
          (gl-vertex 1 2 3)
          (gl-vertex-v (gl-float-vector 1 2 3 4))
          (gl-end))))

(define canvas (new canvas%
                    [parent frame]
                    [min-width 500]
                    [min-height 500]
                    [style '(gl)]
                    [paint-callback draw]))

(send frame show #t)

以下代码将红色三角形绘制到 canvas。您可以用该示例代码替换 draw-triangle 中的代码,但它似乎只显示了一些命名约定,实际上什么也没做。

#lang racket/base

(require racket/gui
         sgl)

(define (draw-triangle)
  (gl-begin 'triangles)
  (gl-color 1 0 0)
  (gl-vertex 0 0 0)
  (gl-vertex 0.75 0 0)
  (gl-vertex 0.75 0.75 0)
  (gl-end))

(define my-canvas%
  (class* canvas% ()
    (inherit with-gl-context swap-gl-buffers)
    (define/override (on-paint)
      (with-gl-context (lambda ()
                         (draw-triangle)
                         (swap-gl-buffers))))
    (super-instantiate () (style '(gl)))))

(define frame (new frame%
                 [label "OpenGL"]
                 [min-width 500]
                 [min-height 500]))

(define canvas (new my-canvas%
                    [parent frame]))

(send frame show #t)