Рамка tkinter с opengl - PullRequest
       128

Рамка tkinter с opengl

1 голос
/ 21 июня 2020

Пожалуйста, я пытаюсь нарисовать квадрат с помощью opengl, используя фрейм tkinter, но квадрат не отображается. Вот мой код. Я новенький, пожалуйста, я не знаю, как создавать блочные коды, подобные другим.

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()

У меня нет ошибок, ожидайте, что зеленый экран без нарисованных линий

Я не получил ошибок, ожидайте зеленого экран без линий. Если вы можете помочь мне с другим кодом или помочь исправить этот, я пытался.

Это изображение результата кода, он не показывает ошибок, но строки не отображались

1 Ответ

0 голосов
/ 21 июня 2020

Линия не отображается, потому что вы не настроили Orthographi c проекцию . Если вы не устанавливаете орфографическую c проекцию, вам необходимо указать координаты в нормализованном пространстве устройства. ND C - уникальный куб, у которого левый, нижний, близкий к (-1, -1, -1) и правый, верхний, дальний от (1, 1, 1).

Укажите орфографическая матрица c GL_PROJECTION (см. glMatrixMode ) на glOrtho, которая отображает координаты окна в ND C:

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)

        glLoadIdentity()

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