如何在球拍中用OpenGL绘制三角形

如何在球拍中用OpenGL绘制三角形,opengl,racket,Opengl,Racket,我试图从一个简单的GUI窗口中获得这个三角形示例,但我看到的只是一个黑框。我错过了什么来让一些东西出现 #朗球拍 (需要球拍/图形用户界面/底座) sgl sgl/gl矢量) (定义框架(新框架%[标签“OpenGL”])) (定义(绘制自dc) (发送自我 使用gl上下文 (lambda() (gl“开始”三角形) (德国劳埃德船级社顶点1 2 3) (gl-vertex-v(gl浮点向量1 2 3 4)) (完) (定义画布(新画布%) [父帧] [最小宽度500] [最小高度500] [样

我试图从一个简单的GUI窗口中获得这个三角形示例,但我看到的只是一个黑框。我错过了什么来让一些东西出现

#朗球拍
(需要球拍/图形用户界面/底座)
sgl
sgl/gl矢量)
(定义框架(新框架%[标签“OpenGL”]))
(定义(绘制自dc)
(发送自我
使用gl上下文
(lambda()
(gl“开始”三角形)
(德国劳埃德船级社顶点1 2 3)
(gl-vertex-v(gl浮点向量1 2 3 4))
(完)
(定义画布(新画布%)
[父帧]
[最小宽度500]
[最小高度500]
[样式(gl)]
[绘制回调图])
(发送帧显示#t)

以下代码将红色三角形绘制到画布中。您可以用该示例代码替换
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)

嘿,马丁,谢谢你的回答!我可以让它工作,但我必须在
绘制三角形的开始处添加另一条线
(gl视口0 500 500)