如何在 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)
我试图从 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)