Найти - Пользователи
Полная версия: Вопрос по графике
Начало » Python для экспертов » Вопрос по графике
1 2 3 4 5
Андрей Светлов
Оффтоп. Предлагаю присвоить Ferromanу звание “почетного цербера”. Без всякой иронии и в знак глубочайшего уважения.
За то, что задает очень правильные вопросы в ответ, при этом не преподнося готовое решение “на блюдечке” - но указывая правильный путь.
Ferroman
Я знал что кто-то что-то подобное предложит :)
За похвалу - спасибо.
Lumer
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 бинарный?
timas
….
да и что значит фаил *blend бинарный?

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

Насчет model3d - походу такого модуля в pygame нет. Зато здесь http://www.pygame.org/wiki/OBJFileLoader?parent=CookBook есть пример загрузки *.obj c текстурами, освещением, материалами.
Striver
Почему-то гугл на запрос “python model3d” выдаёт ссылки только на перл и яву. Питоновского модуля я не нашел (искал, правда, недолго). Может, в самой этой книжке указано, где такой модуль брать?

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

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

на страничке pygame есть код для загрузки obj : http://www.pygame.org/wiki/OBJFileLoader
Lumer
нет в книге нет где можно найти эти модули также я обнаружил что нет модулей matrix44 Vector3 Vector2 может это в старой версии pygame эти модули есть а в новых нет?
Lumer
Striver ты что предлогаеш начать изучать Pyogre думаеш поможет?
Ferroman
Lumer
Вполне может быть что всё переделали. А вообще убери книгу подальше и смотри в документацию.
Задача у тебя какая? Вполне может быть что выбранная библиотека - не лучший выбор. Может стоит посмотреть в сторону чегото более документированного с примерами. Panda3d, DirectPython, PyOgre, CrystalSpace, Irrlicht и другие
А может прямо в блендере скрипты писать?
Striver
Lumer: Striver ты что предлогаеш начать изучать Pyogre думаеш поможет?

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

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

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