Найти - Пользователи
Полная версия: ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop
Начало » Python для новичков » ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop
1
rudm
Не могу понять почему.
Вот код.
from OpenGL.GL import *   
from OpenGL.GLU import *
from OpenGL.GLUT import *

def InitGL(Width, Height):
glClearColor(0.0, 0.0, 0.0, 0.0)
#gluLookAt(-0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
#glClearDepth(1.0)
#glDepthFunc(GL_LESS)
#glEnable(GL_DEPTH_TEST)
#glEnable(GL_LIGHTING)
#glEnable(GL_LIGHT0)
#glEnable(GL_COLOR_MATERIAL)


def ReSizeGLScene(Width, Height):
if Height == 0: Height = 1
glViewport(0, 0, Width, Height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()

def DrawGLScene():
glClear(GL_COLOR_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluLookAt(-0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
glPushMatrix()
glTranslatef(-1.0, 0.0, 0.0)
glEnable(GL_POINT_SMOOTH)
glPointSize(3)
glBegin(GL_POINTS)
glVertex3f(0.0, 0.0, 0.0)
glEnd()
glPopMatrix()
glTranslatef(1.0, 0.0, 0.0)
glBegin(GL_LINE_LOOP)
glVertex3f(0.4, 0.5, 0.6)
glVertex3f(0.2, 0.4, 0.1)
glEnd()
glutSwapBuffers()

def KeyPressed(*args):
if args[0] == "\033": sys.exit()

def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
glutInitWindowSize(800, 600)
glutInitWindowPosition(0, 0)
glutCreateWindow("Will it ever works properly at last?")
glutDisplayFunc(DrawGLScene)
glutIdleFunc(DrawGLScene)
glutReshapeFunc(ReSizeGLScene)
glutKeyboardFunc(KeyPressed)
InitGL(800, 600)
glutMainLoop()

main()
sypper-pit
пиши в GUI
rudm
нельзя ли поподробнее? желательно с примером кода, поскольку я новичок как в питоне так и в OpenGL и программировании вообще.
regall
Попробуйте вместо GL_LINE_LOOP использовать GL_LINE_STRIP. Если у вас видеокарта семейства ATI Radeon - от GL_LINE_LOOP откажитесь (есть баги). Единственное отличие - GL_LINE_LOOP сам “закрывает” ламаную, то есть в вашем случае должен отрисоваться треугольник. В случае GL_LINE_STRIP придется указать три точки.
rudm
нет, GL_LINE_STRIP нге дает результата к сожалению. Вероятно что то не то с положением камеры или еще с чем то, в общем я разобратся не могу.
regall
rudm
Вероятно что то не то с положением камеры или еще с чем то, в общем я разобратся не могу.
Верно, камера расположена так, что вы не можете увидеть линию. Попробуйте перед отрисовкой LINE_LOOP в функции glTranslatef поиграться с параметрами. Походу если все ноли указать, то увидите.
rudm
Да, действительно, рисует и точку и линию, спасибо!
Надо теперь научится рисовать их друг за другом. То есть рисоватьточку, делать небольшую задержку, потом рисовать линию
Подскажите пожалуйста, как в OpenGL (или наврное даже лучше средствами Python) сделать задержку по времени?
И как “стирается” с экрана объект OpenGL?
regall
rudm
То есть рисоватьточку, делать небольшую задержку
Это уже к OpenGL не имеет отношение, он только делает рендеринг.
rudm
И как “стирается” с экрана объект OpenGL?
Это не совсем правильно. DrawGLScene рисует. Если вы хотите “стереть”, просто не рисуйте при наступлении некоторого условия.

UPD
В билиотеке утилит Glut есть glutTimerFunc. Думаю, это то, что вам нужно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB