Форум сайта python.su
приветик всем ! :) Плиз, выложите примерчик с задаваемым треугольниками вращающимся 3D-объектом directX на wx панели. Сколько не искала - не могу ничего подобного найти :(
Офлайн
DirectPython
PS: между прочим - первая ссылка в гугле по запросу directx wxPython
Офлайн
Это очень замечательная страничка, но вот только у меня проблема не с тем чтобы скачать directX, а с тем чтобы реализовать на нём конкретную задачу, поэтому и прошу конкретный пример причём ориентированный не на работу с спрайтами, а с заданием своего объекта.
Офлайн
4 ошибки.
1. Не вижу где я предлагаю скачать DirectX. Или Вы решили что DirectX и DirectPython - одно и то же?
2. Не вижу где я предлагаю использовать спрайты. Вы же, вроде бы, 3D модель хотели отобразить, а не 2D. К чему Вы их вспомнили?
3. Задача не конкретная. В каком формате будет задаватся меш?
4. Вы даже не пытались скачать и посмотреть DirectPython. А там в примерах, между прочим, есть пример отображения мешей в wxWidgets и Tkinter.
Сарказм - это попоытка оскорбить собеседника. Попробуйте поменять отношение к людям которые пытаются Вам помочь.
Офлайн
Почему сразу всё воспринимать в штыки? Я вовсе не собиралась никого обижать или оскорблять. А вот говорить о том что человек не пытался делать не спросив его - зря. DirectPython я скачала и эти примеры видела, но пример там для 2D, переделав всё на вариант 3D и как я не бьюсь трансформация объктов у меня не получается.
А категоричность утверждений всегда должна подкрепляться фактами :)
Офлайн
Я выходил исключительно из того что Вы сказали.
Это очень замечательная страничка, но вот толькоВот это ОЧЕНЬ похоже на сарказм.
Почему сразу всё воспринимать в штыки? Я вовсе не собиралась никого обижать или оскорблять.Да какие там штыки. Простая реакция.
А вот говорить о том что человек не пытался делать не спросив его - зря.Да нет, не зря. Вы нигде не написали о том что скачали и о том что не получилось. Вы написали про DirectX (я его не предлагал), про спрайты (к чему бы это?). Если бы Вы скачали до того как написали мне ответ - ни про directX ни про спрайты речи бы не было. ;)
2D, переделав всё на вариант 3D и как я не бьюсь трансформация объктов у меня не получается.На самом деле там 3D.
import os import d3d from d3dc import * try: import wx except: d3d.messageBox(u"wxPython sample", u"wxPython is not available.\n\nThis sample will not work without it.") raise #Simple pre-transformed triangle. triangle = ( (10.0, 400.0, 0.5, 1.0, 0x80ffff00), (190.0, 10.0, 0.5, 1.0, 0x80ff00ff), (370.0, 400.0, 0.5, 1.0, 0x8000ff00), ) class MainFrame(wx.Frame): def __init__(self, parent, id, title, pos, size=(400, 600)): wx.Frame.__init__(self, parent, id, title, pos, size) self.mainpanel = wx.Panel(self, -1) self.leftwindow = wx.Panel(self.mainpanel, -1, (10, 10), (380, 450)) self.leftwindow.SetBackgroundColour(wx.WHITE) useleft = wx.Button(self.mainpanel, -1, "Rotate", (100, 500)) self.Bind(wx.EVT_BUTTON, self.useLeft, useleft) self.Bind(wx.EVT_PAINT, self.onPaint) self.Bind(wx.EVT_IDLE, self.onIdle) #Create a device that preserves its backbuffer after #present() by using SWAPCOPY d3d.createDevice(u"", u"", 0, 0, False, CREATE.SOFTWARE | CREATE.SWAPCOPY, self.leftwindow.GetHandle()) self.override = 0 self.media = None self.mesh = d3d.StaticMesh(u"xfiles/static.bigship.x") center, radius = self.mesh.getBoundingVolume() self.scale = 10.0 / radius self.rotation = 0.0 self.render() #We only have to render once, use present() to show it. def render(self): d3d.clear() d3d.beginScene() d3d.setState(RS.LIGHTING, True) d3d.setState(RS.AMBIENT, 0x00202020) d3d.setState(RS.SPECULARENABLE, True) d3d.setLight(0, LIGHT.POINT, 0xffff0000, 50.0, (0.0, 30.0, 0.0)) d3d.setState(RS.ZWRITEENABLE, False) d3d.setState(RS.ALPHABLENDENABLE, True) d3d.setState(RS.FVF, FVF.XYZRHW | FVF.DIFFUSE) d3d.drawVertices(TYPE.TRIANGLELIST, triangle) d3d.setState(RS.ALPHABLENDENABLE, False) d3d.setState(RS.ZWRITEENABLE, True) d3d.setView((0.0, 28.0, -28.0,), (0.0, 0.0, 0.0)) d3d.setTransform((0, 0, 0), (0, self.rotation, 0), (self.scale, self.scale, self.scale)) self.mesh.render() d3d.endScene() def useLeft(self, evt): #self.override = 0 self.rotation +=0.1 self.render() #self.leftwindow.Refresh() def present(self): try: d3d.present(self.override) except: #Device is not functional. For example #Fast user switching or power saving modes can cause this. try: #Try to reset. d3d.reset() except: #Failed, try again later. return #All ok, continue as usual. The backbuffer has #been lost however, so we need to render it again. self.render() def onIdle(self, evt): self.present() def onPaint(self, evt): dc = wx.PaintDC(self) #self.present() class MainApp(wx.App): def OnInit(self): frame = MainFrame(None, -1, "DirectPython with wxPython", (10, 10), (400, 600)) frame.CenterOnScreen() frame.Show() return True if __name__ == "__main__": app = MainApp(False) app.MainLoop()
Отредактировано (Май 28, 2008 14:06:49)
Офлайн
:) спасибо большое, но здесь вращается структура загруженная из файла *.x а мне нужно чтобы я вращался мой набор треугольников. Если брать этот пример то вращать мне нужно triangle, которые выводятся d3d.drawVertices(TYPE.TRIANGLELIST, triangle) Или мне нужно как-то создать объект аналогичный получаемому d3d.StaticMesh(), но как ???
Офлайн
Если набор статичный - сделайте *.х меш и используйте его.
Свои треугольники в меш сразу перевести не получится, насколько я понимаю.
Офлайн
:) как раз только что закончила реализовывать эту идею :) действительно работает, хотя меня чисто из любопытства интересно неужели нельзя как-либо трансформировать обычный список треугольников )))
Офлайн
Мне уже тоже интересно. Попробую узнать у автора.
Офлайн