繁体   English   中英

Tkinter 车架与 opengl

[英]Tkinter frame with opengl

我正在尝试使用 tkinter 框架绘制带有 opengl 的正方形,但正方形没有渲染。

这是我的代码:

import tkinter as tk
from opengl.gl import *

from pyopengltk import OpenGLFrame

class frame(OpenGLFrame):

    def initgl(self):
        glViewport(0.0,self.width,self.height)
        glClearColor(0.0,1.0,0.0,0.0)
        
    def redraw(self):

        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER)

        glLoadIdentity()

        glBegin(GL_LINES)
        glColor3f(1.0,0.0,3.0)
        glVertex2f(200,100)
        glVertex2f(100,100)
        glEnd()
        gl_Flush()

if __name__=='__main__':

    root = tk.Tk()
    app = frame(root,width=500,height=500)
    app.pack(fill=tk.BOTH, expand=tk.YES)
    app.mainloop()

我没有错误期望没有画线的绿屏。

这是代码结果的图像,它没有显示错误,但行没有显示:

该线不会渲染,因为您没有设置Orthographic projection 如果您不设置正交投影,那么您必须在规范化设备空间中指定坐标。 NDC 是一个独特的立方体,左、下、近为 (-1, -1, -1),右、上、远为 (1, 1, 1)。

通过glOrtho指定一个正交GL_PROJECTION矩阵(参见glMatrixMode ),它将 window 坐标映射到 NDC:

class frame(OpenGLFrame):

    def initgl(self):
        glViewport(0, 0, self.width, self.height)
        glClearColor(0.0,1.0,0.0,0.0)

        # setup projection matrix
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glOrtho(0, self.width, self.height, 0, -1, 1)

        # setup identity model view matrix
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()

        
    def redraw(self):

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

        glLoadIdentity()

        glBegin(GL_LINES)
        glColor3f(1.0,0.0,3.0)
        glVertex2f(200,100)
        glVertex2f(100,100)
        glEnd()
        glFlush()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM