带OpenGL的绘图机框架

nszi6y05  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(118)

我试图用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()

我没有得到任何错误,除了绿色屏幕没有画线。
这是代码结果的图像,它显示没有错误,但行没有显示:

w9apscun

w9apscun1#

因为没有设置Orthographic projection,所以不会渲染这条线。如果没有设置正投影,则必须指定归一化设备空间中的坐标。NDC是一个唯一的立方体,左、下、近为(-1,-1,-1),右、上、远为(1,1,1)。
通过glOrtho指定一个正交GL_PROJECTION矩阵(请参见glMatrixMode),该矩阵将窗口坐标Map到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()

相关问题