Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2008 01:53:40

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопрос по графике

Оффтоп. Предлагаю присвоить Ferromanу звание “почетного цербера”. Без всякой иронии и в знак глубочайшего уважения.
За то, что задает очень правильные вопросы в ответ, при этом не преподнося готовое решение “на блюдечке” - но указывая правильный путь.



Офлайн

#2 Окт. 28, 2008 02:31:27

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос по графике

Я знал что кто-то что-то подобное предложит :)
За похвалу - спасибо.

Офлайн

#3 Окт. 28, 2008 05:21:47

Lumer
От:
Зарегистрирован: 2008-06-16
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по графике

SCREEN_SIZE = (800, 600)
from math import radians
from OpenGL.GL import *
from OpenGL.GLU import *

import pygame
from pygame.locals import *
# Import the Model3D class
import model3d
def resize(width, height):
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/height, .1, 1000.)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def init():
# Enable the GL features we will be using
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHTING)
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_TEXTURE_2D)
glEnable(GL_CULL_FACE)
glShadeModel(GL_SMOOTH)
glClearColor(1.0, 1.0, 1.0, 0.0) # white
# Set the material
glMaterial(GL_FRONT, GL_AMBIENT, (0.0, 0.0, 0.0, 1.0))
glMaterial(GL_FRONT, GL_DIFFUSE, (0.2, 0.2, 0.2, 1.0))
glMaterial(GL_FRONT, GL_SPECULAR, (1.0, 1.0, 1.0, 1.0))
glMaterial(GL_FRONT, GL_SHININESS, 10.0)
# Set light parameters
glLight(GL_LIGHT0, GL_AMBIENT, (0.0, 0.0, 0.0, 1.0))
glLight(GL_LIGHT0, GL_DIFFUSE, (0.4, 0.4, 0.4, 1.0))
glLight(GL_LIGHT0, GL_SPECULAR, (1.0, 1.0, 1.0, 1.0))
# Enable light 1 and set position
glEnable(GL_LIGHT0)
glLight(GL_LIGHT0, GL_POSITION, (0, .5, 1, 0))

def run():
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, HWSURFACE|OPENGL|DOUBLEBUF)
resize(*SCREEN_SIZE)
init()
clock = pygame.time.Clock()
# Read the model
tank_model = model3d.Model3D()
tank_model.read_obj('mytank.obj')
rotation = 0.0
while True:
for event in pygame.event.get():
if event.type == QUIT:
return
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
time_passed = clock.tick()
time_passed_seconds = time_passed / 1000.0
glLoadIdentity()
glRotatef(15, 1, 0, 0)
glTranslatef(0.0, -1.5, -3.5)
rotation += time_passed_seconds * 45.0
glRotatef(rotation, 0, 1, 0)
tank_model.draw_quick()
pygame.display.flip()
if __name__ == "__main__":
run()
Этот кот взят из книги Beginning Game
Development with
Python and Pygame
From Novice to Professional
но почему то он не работает
при вводе команды Import model3d
выходит соовщение об ошибке
да и что значит фаил *blend бинарный?



Отредактировано (Окт. 28, 2008 05:24:21)

Офлайн

#4 Окт. 28, 2008 09:09:46

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по графике

….
да и что значит фаил *blend бинарный?

Открой с помощью блокнота, .blend и какой-нибудь .3ds и ощути разницу.

Насчет model3d - походу такого модуля в pygame нет. Зато здесь http://www.pygame.org/wiki/OBJFileLoader?parent=CookBook есть пример загрузки *.obj c текстурами, освещением, материалами.



Офлайн

#5 Окт. 28, 2008 11:13:15

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Вопрос по графике

Почему-то гугл на запрос “python model3d” выдаёт ссылки только на перл и яву. Питоновского модуля я не нашел (искал, правда, недолго). Может, в самой этой книжке указано, где такой модуль брать?

Вообще, может, если не знаешь, что такое “фаил *blend бинарный”, стоит сначала с основами поразбираться, не пытаясь сразу в 3D-графику влезать?

Я года 3 назад разбирался с PyOpenGL, частично написал свой парсер формата .ase (текстовый формат, экспортируемый 3DMax'ом), потом бросил, слишком медленно это в питоне, да и собственный парсер до идеала вряд-ли бы смог довести. Сейчас для 3D использую PyOgre, там всё проще, чем с голым OpenGL, есть нормальный экспортёр из Блендера, да и на сайте Ogre3d.ru русской документации прилично поднакопилось.



Офлайн

#6 Окт. 28, 2008 13:50:13

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по графике

да, странный какой-то модуль. Может его в книжке где-то раньше написали? или он на диске прилагался.

на страничке pygame есть код для загрузки obj : http://www.pygame.org/wiki/OBJFileLoader



Офлайн

#7 Окт. 28, 2008 18:22:22

Lumer
От:
Зарегистрирован: 2008-06-16
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по графике

нет в книге нет где можно найти эти модули также я обнаружил что нет модулей matrix44 Vector3 Vector2 может это в старой версии pygame эти модули есть а в новых нет?



Отредактировано (Окт. 28, 2008 18:25:40)

Офлайн

#8 Окт. 28, 2008 18:24:34

Lumer
От:
Зарегистрирован: 2008-06-16
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по графике

Striver ты что предлогаеш начать изучать Pyogre думаеш поможет?



Офлайн

#9 Окт. 28, 2008 18:50:08

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос по графике

Lumer
Вполне может быть что всё переделали. А вообще убери книгу подальше и смотри в документацию.
Задача у тебя какая? Вполне может быть что выбранная библиотека - не лучший выбор. Может стоит посмотреть в сторону чегото более документированного с примерами. Panda3d, DirectPython, PyOgre, CrystalSpace, Irrlicht и другие
А может прямо в блендере скрипты писать?

Офлайн

#10 Окт. 29, 2008 12:02:02

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Вопрос по графике

Lumer: Striver ты что предлогаеш начать изучать Pyogre думаеш поможет?

Я же не знаю, твоей общей задачи, чего ты хочешь добиться… Попробую предположить:

Если ты нацелен делать игру, то без вариантов возня с PyOpenGL тебе не подойдёт. Зайди на какой-нибудь gamedev.ru или подобный ему сайт, и там тебе скажут, что если начинаешь делать свой движок, то на этом всё и заглохнет. Есть множество готовых движков, Ferroman дал тебе наводку на них. Я пользовался Ogre, доволен им. Также скачивал и пробовал Panda3D, но у неё вообще нет русскоязычных ресурсов.
Также можно использовать движок Блендера. На форуме blender3d.org.ua его много обсуждают, может, чего путное для себя найдёшь. Правда, дальше болтовни там никто не продвинулся.

Другой вариант, если ты именно с OpenGL разобраться хочешь, поизучать его и т.д. (Например, чтобы в светлом будущем крутейший движок на C++ написать). Тогда, PyOpenGL - то, что доктор прописал. А вместо model3d можешь взять другой импортёр, например Dice 3DS по ссылке Ferroman'а. Или парсить вручную, как я пытался.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version