python可以实现3d游戏开发吗,python3d游戏引擎

  python可以实现3d游戏开发吗,python3d游戏引擎

  所谓的3D,说到底只是利用透视原理,在2D画面上制造出一个有深度(说白了就是近、大、远、小)的错觉的画面,但毕竟画面是平面的,不能真正画出距离。换句话说,电脑3D的本质仍然是2D,只是添加了一些额外的东西。

  在纯pygame中,我们通过在2D图像上计算不同大小的东西来绘制3D图片:)

  距离的魔力

  我们在现实中看到的和在屏幕上看到的最大区别是我们感觉到的与真实物体的距离。此外,距离的增加是因为我们的眼睛看到不同的东西。如果你交替闭上眼睛,你会发现眼前的东西左右移动。用一只眼睛很难正确判断距离。虽然可以感受到比上眼更近的感觉,但是线很难穿过针眼等。这样就更详细了。

  在3D屏幕上绘图时,请根据此规则查看以下代码。导入页面

  从pygame.locals导入*

  从随机导入随机

  Classstar(对象):

  def __init__(self,x,y,speed):

  self.x=x

  self.y=y

  self.speed=速度

  定义运行() :

  pygame.init(

  screen=py game . display . set _ mode((640,480),全屏)).

  stars=[]

  #在第一帧,画几颗星星

  forninxrange(200):

  x=float (randint (0,639))

  y=float (randint (0,479))

  speed=float (randint (10,300))

  stars.append(star(x,y,speed))

  clock=pygame.time.Clock(

  White=(255,255,255))。

  虽然正确:

  对于pygame.event.get()中的事件:

  如果event.type==QUIT:

  返回

  if event.type==KEYDOWN:

  返回

  #添加一颗新星

  y=float (randint (0,479))

  speed=float (randint (10,300))

  star=star(640。y,速度)).

  stars.append(star)

  time_passed=clock .滴答(

  时间流逝秒=时间流逝/1000 .

  screen.fill ((0,0,0))

  #画出所有的星星

  对于《群星》中的明星:

  new _ x=star . x-time _ passed _ seconds * star . speed

  pygame.draw.aaline(screen,white,)new_x,star.y),star.x 1 .star.y))

  star.x=new_x

  defon_screen(star):

  return star.x 0

  #星星飞出了画面,所以被删了

  stars=filter(on_screen,stars)))).

  pygame.display.update(

  if __name__==__main__ :

  run())

  你也可以在这里添加全屏。我感觉好多了。

  这个程序给了我图片,请发挥你的想象力。难道不是一个宇宙吗?无数的星云来来去去,或快或慢。其实看代码,我们只是画了一条长短不一的线!虽然很简单,但是使用了很多python技术,尤其是函数式编程的(小)技巧。但是,强你一定没事:(但是,既然pygame的代码什么都没说,为什么这个会有3D效果?感谢你的大脑。我知道它在远处看起来很晚,所以我有这种错觉。

  理解3D空间

  3D空间的问题基本上是立体几何的问题。一半的高中生应该基本能看懂,这里就不说了。可以看到下图中的球位于位置(7,5,10)。换句话说,当你站在原点时,你面对的是Z轴。然后,球在你的左7,前5,前10的位置。这就够了~

  使用3D矢量

  我们学习二维向量是为了表达运动。在三维空间,当然是用三维向量。其实和二次元的概念一样,比如增减尺度什么的。在这里,我们不需要三要素的组列表来练习。直接牺牲我们的gameobjects神器吧。从gameobjects.vector3导入*

  a=向量3(6,8,12)).

  b=向量3(10,16,12)).

  打印“是”,一个

  打印 b是,b

  打印‘A的大小是’,A.get_magnitude(

  打印“A B is”,A B

  打印“A-B是”,ab

  打印 A normalized is ,A.get_normalized()

  打印“A*2是”,A * 2

  执行并查看结果。有点无聊?的确,单靠数字无法表达3D之美。下一次,让我们试着让物体在三维空间中运动。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: