Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2010 11:01:54

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

Не могу понять почему.
Вот код.

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



Офлайн

#2 Апрель 5, 2010 20:51:38

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

пиши в GUI

Офлайн

#3 Апрель 6, 2010 16:33:19

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

нельзя ли поподробнее? желательно с примером кода, поскольку я новичок как в питоне так и в OpenGL и программировании вообще.



Офлайн

#4 Апрель 6, 2010 16:45:34

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

Попробуйте вместо GL_LINE_LOOP использовать GL_LINE_STRIP. Если у вас видеокарта семейства ATI Radeon - от GL_LINE_LOOP откажитесь (есть баги). Единственное отличие - GL_LINE_LOOP сам “закрывает” ламаную, то есть в вашем случае должен отрисоваться треугольник. В случае GL_LINE_STRIP придется указать три точки.



Отредактировано (Апрель 6, 2010 16:47:25)

Офлайн

#5 Апрель 9, 2010 07:02:53

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

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



Офлайн

#6 Апрель 9, 2010 10:01:02

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

rudm
Вероятно что то не то с положением камеры или еще с чем то, в общем я разобратся не могу.
Верно, камера расположена так, что вы не можете увидеть линию. Попробуйте перед отрисовкой LINE_LOOP в функции glTranslatef поиграться с параметрами. Походу если все ноли указать, то увидите.



Офлайн

#7 Апрель 15, 2010 17:29:38

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

Да, действительно, рисует и точку и линию, спасибо!
Надо теперь научится рисовать их друг за другом. То есть рисоватьточку, делать небольшую задержку, потом рисовать линию
Подскажите пожалуйста, как в OpenGL (или наврное даже лучше средствами Python) сделать задержку по времени?
И как “стирается” с экрана объект OpenGL?



Офлайн

#8 Апрель 15, 2010 19:46:15

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

ОpenGL. Рисует точку, но не может нарисовать вслед за ней line_loop

rudm
То есть рисоватьточку, делать небольшую задержку
Это уже к OpenGL не имеет отношение, он только делает рендеринг.
rudm
И как “стирается” с экрана объект OpenGL?
Это не совсем правильно. DrawGLScene рисует. Если вы хотите “стереть”, просто не рисуйте при наступлении некоторого условия.

UPD
В билиотеке утилит Glut есть glutTimerFunc. Думаю, это то, что вам нужно.



Отредактировано (Апрель 15, 2010 19:48:15)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version